给你个参考 复制到粘贴到编译器调试几遍 看看思路 在写你那个就容易多了 建议尽量别用goto语句
#include<iostream>
#include<string.h>
#include<iomanip>
#include<conio.h>
#include <stdlib.h>
using namespace std;
#define NULL 0
struct student
{
char name[30]; //姓名
char sex[30]; //性别
int num; //学号
int age; //年龄
double test_chinese; //语文成绩
double test_math; //数学成绩
double date; //总成绩
struct student *next;
};
student *put_information(student *); //创建学生信息库
student *del_information(student *); //删除学生信息
student *insert_information(student *); //添加学生信息
student *search_name(student *); // 按姓名查找学生信息
student *search_num(student *) ; //按学号查找
student *test_totol(student *); ////总体成绩
student *order(student *); // 排名
student *print_information(student *); //查看信息
int n;
int main()
{
int enternum;
student *head;
head=NULL;
cout<<"********************************************************************************"<<endl;
cout<<" 欢迎使用学生理系统 "<<endl;
cout<<"********************************************************************************"<<endl;
cout<<" 按任意键执行主菜单! "<<endl;
getch();
while(1)
{
cout<<"***********************************主菜单*************************************"<<endl;
cout<<" 0键退出 "<<endl;
cout<<" 1键输入学生信息 "<<endl;
cout<<" 2键输出学习信息 "<<endl;
cout<<" 3键删除学生信息 "<<endl;
cout<<" 4键添加学生信息 "<<endl;
cout<<" 5键按姓名查找学生信息 "<<endl;
cout<<" 6键按学号查找学生信息 "<<endl;
cout<<" 7键查看学生总体成绩 "<<endl;
cout<<" 8键查看排名 "<<endl;
cin>>enternum;
switch(enternum)
{
case(0):cout<<"************************************************************************"<<endl;
cout<<endl;
cout<<" 谢谢使用高校学籍管理系统 "<<endl;
cout<<endl;
cout<<"************************************************************************"<<endl;
exit(0);
case(1):head=put_information(head);
break;
case(2):print_information(head);
break;
case(3):head=del_information(head);
break;
case(4):head=insert_information(head);
break;
case(5):head=search_name(head);
break;
case(6):head=search_num(head);
break;
case(7):head=test_totol(head);
break;
case(8):head=order(head);
break;
default:cout<<" 对不起,你只能输入0~7键,请重新输入 "<<endl;
break;
}
}
return 0;
}
student *put_information(student *head) ////////信息输入函数
{
student *p1,*p2;
int N, choose;
if(head!=NULL)
{
cout<<"你已经输入信息,如果还想输入,请进入添加信息项添加信息"<<endl;
return (head);
}
cout<<"输入你想输入学生信息的个数:";
cin>>N;
n=0;
head=NULL;
p1=p2=new student;
while(n<N)
{
n=n+1;
p1=new student; ///////开辟一个空间
cout<<"请输入第"<<n<<"个学生的信息:"<<endl;
{
cout<<" 姓名:";
cin>>p1->name;
loop: cout<<" 性别(1 男,2 女):";
cin>>choose;
switch(choose)
{
case(1):
strcpy(p1->sex,"男");break;
case(2):
strcpy(p1->sex,"女");break;
default:
cout<<"你的只能输入1或2,请重新输入!!!!";
goto loop;
}
cout<<" 学号:";
cin>>p1->num;
cout<<" 年龄:";
cin>>p1->age;
cout<<"语文成绩:";
cin>>p1->test_chinese;
cout<<"数学成绩:";
cin>>p1->test_math;
}
if(n==1)
{
head=p1;
}
else
{
p2->next=p1;
}
p2=p1;
}
p2->next=NULL;
cout<<"*******************************************************************************"<<endl;
cout<<endl;
cout<<" 你已经成功的输入了"<<N<<"个人的信息 "<<endl;
cout<<endl;
cout<<"*******************************************************************************"<<endl;
cout<<endl;
return (head);
}
student *del_information(student *head) //删除信息函数
{
char del_name[30]; //你想要删除学生的姓名
int input;
student *p1,*p2;
if (head==NULL) //没输入数据
{
cout<<"对不起,你还没输入学生的信息!"<<endl;
return(head);
}
else
{
p1=head; //使p1指向第一个结点
loop: cout<<"请输入你要删除该学生的姓名:";
cin>>del_name;
while(strcmp(p1->name,del_name)!=0&&p1->next!=NULL) //输入的姓名没找到且还有结点
{
p2=p1;
p1=p1->next; //p1后移一个结点
}
if(strcmp(del_name,p1->name)==0) //找到要删除的学生的信息
{
{
if(p1==head) head=p1->next; //若p1指向的是首结点,把第二个结点地址赋予head
else p2->next=p1->next; //否则将下一结点地址赋给前一结点地址
cout<<"***************************************************"<<endl;
cout<<" 删除成功,你删除的学生信息为: "<<endl;
cout<<" 姓名:" <<p1->name<<endl;
cout<<" 学号:" <<p1->num<<endl;
cout<<" 性别:" <<p1->sex<<endl;
cout<<" 年龄:" <<p1->age<<endl;
cout<<" 语文成绩:" <<p1->test_chinese<<endl;
cout<<" 数学成绩:" <<p1->test_math<<endl;
cout<<"***************************************************"<<endl;
n=n-1;
}
LOOP:cout<<"你是否想继续删除学生的信息(1继续,2返回主菜单)"<<endl;
cin>>input;
switch(input)
{
case(1):goto loop;
case(2):break;
default:cout<<"你只能输入1或2,请重新输入!"<<endl;
goto LOOP;
}
}
else
{
cout<<" 找不到 "<<del_name<<"的信息,请重新输入 "<<endl; //找不到信息
goto loop;
}
}
return(head);
}
student *insert_information(student *head) //添加信息函数
{
student *p1,*p2,*p;
int N=0;
head=NULL;
p=new student;
p1=p2=head;
cout<<"请输入添加到的位置(学号)"<<endl;
cin>>p->num;
cout<<"请输入添加学生的信息"<<endl;
{
cout<<" 姓名:";
cin>>p->name;
cout<<" 性别:";
cin>>p->sex;
cout<<" 年龄:";
cin>>p->age;
cout<<"语文成绩:";
cin>>p->test_chinese;
cout<<"数学成绩:";
cin>>p->test_math;
}
while(p1!=0)
{
p2=p1;
p1=p1->next;
}
if(head=NULL)
{
head=p;
p->next=NULL;
N++;
}
else
{
if(p->num==head->num)
{
p=head;
while(head!=NULL)
{
head=head->next;
head->num++;
}
N++;
}
else if(p->num==p1->num&&p->num!=head->num)
{
p2->next=p;
p->next=p1;
while(p1!=NULL)
{
p1->num++;
}
N++;
}
else if(p->num==(p1->num+1)&&p->next==NULL)
{
p=p1->next;
}
}
return (head);
}
student *search_name(student *head) //按姓名查找学生信息函数
{
student *p1,*p2;
int enternum1;
char find_name[30]; //按姓名查找所要输入的姓名
if(head==NULL) //为空表
{
cout<<"你还没输入该学生的信息,请返回输入!"<<endl;
return (head);
}
else
{
p1=head;
begin: cout<<"请输入你要查找学生的姓名:";
cin>>find_name;
while(strcmp(find_name,p1->name)!=0&&p1->next!=NULL) ///////输入的的姓名与已有的数据不同且后面还有学生信息
{
p2=p1;
p1=p1->next; // P1向后移一个节点
}
{
if(strcmp(find_name,p1->name)==0) ///找到了
{
cout<<"***************************************************"<<endl;
cout<<" 删除成功,你查找的学生信息为: "<<endl;
cout<<" 姓名:" <<p1->name<<endl;
cout<<" 学号:" <<p1->num<<endl;
cout<<" 性别:" <<p1->sex<<endl;
cout<<" 年龄:" <<p1->age<<endl;
cout<<" 语文成绩:" <<p1->test_chinese<<endl;
cout<<" 数学成绩:" <<p1->test_math<<endl;
cout<<"***************************************************"<<endl;
hand: cout<<" 是否继续删除(1继续2返回主菜单)";
cin>>enternum1;
switch(enternum1)
{
case(1):
goto begin;
case(2):
break;
default:
cout<<"你只能输入1或2,请重新输入!"<<endl;
goto hand;
}
}
else cout<<"**************学生信息库没该学生的信息!***********"<<endl;
}
}
return(head);
}
student *search_num(student *head)
{
student *p1,*p2;
int enternum2,find_num;
if(head==NULL) //为空表
{
cout<<"你还没输入该学生的信息,请返回输入!"<<endl;
return(head);
}
else
{
p1=head;
begin: cout<<"请输入你要查找学生的学号:";
cin>>find_num;
while(find_num!=p1->num&&p1->next!=NULL) ///////输入的的数与已有的数不同且后面还有学生信息
{
p2=p1;
p1=p1->next; //P1向后移一个节点
}
{
if(find_num==p1->num) /////如果找到了
{
cout<<"***************************************************"<<endl;
cout<<" 你查找的学生信息为: "<<endl;
cout<<" 姓名:" <<p1->name<<endl;
cout<<" 学号:" <<p1->num<<endl;
cout<<" 性别:" <<p1->sex<<endl;
cout<<" 年龄:" <<p1->age<<endl;
cout<<" 语文成绩:" <<p1->test_chinese<<endl;
cout<<" 数学成绩:" <<p1->test_math<<endl;
cout<<"***************************************************"<<endl;
hand: cout<<"按1键继续输入2键返回主菜单!"<<endl;
cin>>enternum2;
switch(enternum2)
{
case(1):
goto begin;break;
case(2):
break;
default:
cout<<"你只能输入1或2,请重新输入!"<<endl;
goto hand;break;
}
}
else cout<<"************学生信息库没该学生的信息!*********"<<endl;
}
}
return (head);
}
student *test_totol(student *head) //求学生总成绩,平均成绩和及格率
{
student *p1 ;
int pass1=0,pass2=0; //及格人数
double sum1=0,sum2=0,mean1,mean2,pass_rate1,pass_rate2;
if(head==NULL)
{
cout<<"对不起,你还没输入学生信息,请返回输入!"<<endl; //空表
return (head);
}
else
{
p1=head;
while(p1!=NULL)
{
sum1+=p1->test_chinese;
sum2+=p1->test_math;
if(p1->test_chinese>=60)pass1++;
if(p1->test_math>=60)pass2++;
p1=p1->next;
}
mean1=1.0*sum1/n;
mean2=1.0*sum2/n;
pass_rate1=(pass1/n)*100;
pass_rate2=(pass2/n)*100;
cout<<"*******************************************************"<<endl;
cout<<" 语文的平均成绩为: "<<mean1 <<endl;
cout<<" 语文的及格率为: "<<pass_rate1<<"%"<<endl;
cout<<"*******************************************************"<<endl;
cout<<" 数学的平均成绩为: "<<mean2 <<endl;
cout<<" 数学的及格率为: "<<pass_rate2<<"%"<<endl;
cout<<"*******************************************************"<<endl;
}
return (head);
}
student *order(student *head)
{
student *p,*q,*tail,*s;
int i=0;
tail=NULL;
while(head->next!=tail)
{
p=head;
p->date=p->test_chinese+p->test_math;
p->next->date=p->next->test_chinese+p->next->test_math;
q=p->next;
while(q->next!=tail)
{
if(p->next->date>q->next->date)
{
s=q->next;
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
q=s;
}
p=p->next;
q=q->next;
}
tail=q;
cout<<"______________________________________"<<endl;
cout<<setw(8)<<"姓名"<<setw(8)<<"总分"<<setw(10)<<"名次"<<endl;
while(p!=NULL)
{
++i;
cout<<"______________________________________"<<endl;
cout<<setw(8)<<p->name<<setw(8)<<p->date<<setw(8)<<"第"<<i<<"名"<<endl;
p=p->next;
}
cout<<"______________________________________"<<endl;
}
return (head);
}
student *print_information(student *head) //查看信息函数
{
student *p1;
if(head==NULL)
{
cout<<"对不起,你还没输入学生信息,请返回输入!"<<endl;
return (head);
}
else
p1=head;
cout<<"____________________________________________________________________________"<<endl;
cout<<setw(8)<<"姓名"<<"|"<<setw(8)<<"学号"<<"|"<<setw(8)<<"性别"<<"|"<<setw(8)
<<"年龄"<<"|"<<setw(8)<<"语文成绩"<<"|"<<setw(8)<<"数学成绩"<<"|"<<endl;
cout<<"____________________________________________________________________________"<<endl;
while(p1!=NULL)
{
cout<<setw(8)<<p1->name<<"|"
<<setw(8)<<p1->num<<"|"
<<setw(8)<<p1->sex<<"|"
<<setw(8)<<p1->age<<"|"
<<setw(8)<<p1->test_chinese<<"|"
<<setw(8)<<p1->test_math<<"|"<<endl;
cout<<"____________________________________________________________________________"<<endl;
p1=p1->next;
}
return (head);
}
不对哦,您再看看可以吗?
追答#define DX 5
这里有定义 表示是 5个班 要输入5次 你说的不对事指什么不对?
c++初学,高人指教
最后,导师还能提供职业发展指导。他们能分享行业内的知识,帮助初学者理解C++在不同领域(如游戏开发、系统编程、网络安全等)的应用。此外,导师还能提供面试准备、项目合作等方面的经验,为初学者的职业道路铺平道路。总之,对于C++初学者而言,找到一位经验丰富的导师是非常有价值的。他们能提供深入的理论...
C++初学者程序设计,请指教
default:cout<<"你只能输入1或2,请重新输入!"<<endl; goto LOOP; } } else { cout<<" 找不到 "<<del_name<<"的信息,请重新输入 "<<endl; \/\/找不到信息 goto loop; } } return(head); } student *insert_information(student *head) \/\/添加信息函数 { student *p1,*p2,...
想学计算机编程。。。求指教。。入门是需要哪些基础
此时你可以看看林锐博士的书,先给你打个预防针,在他的书面前,你会发现自己如此的卑微,本人是膜拜到了极点,无权妄加评论。《高质量C++\/C编程指南》一书,后来更名为《高质量程序设计指南——C++\/C语言》,两本看那一本都无所谓,都很好,值得一看!
初学C++请多指教:怎样转换double型数据的输出方式?
include <iostream.h> void main(){ double a;a=10000*10000;cout.precision(16);cout<<"a="<<a<<endl;}
我想学编程,就是不知道从何入手,有高手请指教!!!
(3)选择一种合适的入门语言 面对各种各样的语言,应按什么样的顺序学呢?程序设计工具不外乎如下几类: 1)本地开发 应用软件开发的工具有:Visual Basic 、Delphi 、VC++ ( C++ Builder ) 等;数据库开发工具有:Visual Foxpro 、Oracle Developer 、Power Builder 等。 2)跨平台开发 开发工具...
C++编程题,求大神指教,实在是小白不会。已知速度和时间和加速度。框架...
double calculate_velocity( double& t ) {return 1e-5*t*t*t - 0.00488*t*t + 0.75795*t + 181.3566;}double calculate_acceleration( double& v ) {return 3.0 - 0.000062*v*v;}Secondly, you need to pay attention to the decmial point of your calculated result, which ...
我是初学C++语言,按照书上的代码编写出现“Error:未定义的标识符'cout...
using namespace std;void PrintArray(char warename[][10],int len,int sum[][12]){ for (int i=0;i<3;i++){ cout << "商品名称:" << warename[i] <<endl;int s = 0;for (int j=0;j<12;j++)s += sum[i][j];cout << "12个月总销量:" << s << endl;} } i...
初学C语言用什么程序呀?个位高手请指教
清华大学出版社出版的谭浩强编写的《C程序设计(第二版)》,这本教材比较好,他中用的是Turbo C 2.0 ,即TC2.0,但书中也介绍了可以用TC++ 3.0,因为后者可以用鼠标操作,前者不支持鼠标。等学的有一定水平了,就可以找一些其他的实例型书了,用VC++ 6.0就比较好了,因为它还支持中文(中文...
学习编程或自学编程的困惑,关于C语言,请指教
1.c语言的确是一门通用且重要的语言,撇去那些特殊的编程语言,拿c语言入门其实是很好的。你说好多直接是拿java或者c#作为第一门编程语言,这也行,一般来说这些面向对象的语言前面都会介绍面向过程的一部分,后面就是介绍面向对象也就是OOP的思想。c语言其实是作为一门稍低层的编程语言,unix\/linux...
请c++大虾指教``怎样改下面的程序,使它能看见结果`本人用的软件是dev...
int call(){return min(a[2],ss);} 这句就错了 你的模版只能带a,b同一类型的 int min函数也是 但是你这里a[2]是整形,ss是短整形 没有一个函数可以调用 自然就错了 而且min函数和原有库函数冲突,必须改名 可以改成如下 template<class Type>Type min1(Type a,Type b){return a>b?b:...