c++课设 学生成绩管理系统.docx
- 文档编号:10609303
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:18
- 大小:19.11KB
c++课设 学生成绩管理系统.docx
《c++课设 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c++课设 学生成绩管理系统.docx(18页珍藏版)》请在冰豆网上搜索。
c++课设学生成绩管理系统
#include
#include
#include
#include
#include
#defineN3//定义常数
structstudent//定义数据结构
{
charcla[30];
charno[30];
charname[30];
intscore[N];
floatsum;
floataverage;
intorder;
student*next;
};
//初始化函数
student*init()
{
system("cls");
cout<<"完成初始化链表......."< returnNULL; } //创建链表 student*creat() { inti;ints;student*h=NULL,*ps1,*pend1;charflag; system("cls"); cout<<"请输入信息..."< do{ ps1=newstudent;//开辟一个新的结点 cout<<"输入班级: "; cin>>ps1->cla; cout<<"输入学号: "; cin>>ps1->no; cout<<"输入姓名: "; cin>>ps1->name; cout<<"请输入"< s=0; for(i=0;i { do { cout<<"输入第"< "; cin>>ps1->score[i]; if(ps1->score[i]>100||ps1->score[i]<0) cout<<"输入的成绩不正确,请重新输入"<<'\n'; }while(ps1->score[i]>100||ps1->score[i]<0); s=s+ps1->score[i]; } ps1->sum=s; ps1->average=(float)s/N; ps1->order=0;//未排序前此值为0 if(h==NULL) h=ps1; else pend1->next=ps1; pend1=ps1;//创建链表 cout<<"是否继续输入学生信息(yorn)? "; cin>>flag; }while(flag=='y'||flag=='Y');//提示是否继续输入学生的信息 pend1->next=NULL;//给链表尾赋空值 returnh; } //删除记录 student*delet(student*h) { system("cls"); student*ps2,*pend2; chars[30]; cout<<"输入要删除记录的学号: "< cin>>s; pend2=h; ps2=h; while(strcmp(ps2->no,s)&&ps2! =NULL)//当记录的学号不是要找 { pend2=ps2;//将p的指针赋给q指针作为p的前驱指针 ps2=ps2->next;//将p指向下一条记录 } if(ps2==NULL)//如果p为空,说明链表中没有该结点 cout<<"没有学号为"< else//p不为空时,显示找到的记录信息 { cout<<"******************已经找到****************"< cout<<"班级"<<'\t'<<"学号"<<'\t'<<"姓名"<<'\t'<<"成绩1"<<'\t'<<"成绩2"<<'\t'<<"成绩3"<<'\t'<<"总分"<<'\t'<<"平均分"<<""<<"名次"< cout<<"----"<<'\t'<<"----------"<<'\t'<<"------"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"----"<<'\t'<<"--------"<<""<<"----"< cout< cout<<"*****************结束********************"< cout<<"按任意一键删除该学生的记录"< getch();//压任一键后,开始删除 if(ps2==h)//如果p==h,说明被删除结点是头结点 h=ps2->next; else pend2->next=ps2->next;//不是头指针,将p的后继结点作为q的后继结点 cout<<"不要忘记保存文件"< } returnh; } //输出链表中的结点信息 voidprint(student*h) { inti=0; student*p1; system("cls"); p1=h; cout<<"****************学生信息*********************"<<'\n'; cout<<"班级"<<'\t'<<"学号"<<'\t'<<"姓名"<<'\t'<<"成绩1"<<'\t'<<"成绩2"<<'\t'<<"成绩3"<<'\t'<<"总分"<<'\t'<<"平均分"<<""<<"名次"< cout<<"----"<<'\t'<<"----------"<<'\t'<<"------"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"----"<<'\t'<<"--------"<<""<<"----"< while(p1! =NULL) { i++; cout< p1=p1->next; } cout<<"**********结束*************************"< } //查找记录 voidsearch(student*h) { system("cls"); student*p2; chars[15]; cout<<"请输入要查找的姓名"< scanf("%s",s); p2=h; while(strcmp(p2->name,s)&&p2! =NULL)//当记录姓名不是要找,或指针不为空时 p2=p2->next; if(p2==NULL) cout<<"没有"< else { cout<<"*****************已经找到*******************"< cout<<"班级"<<'\t'<<"学号"<<'\t'<<"姓名"<<'\t'<<"成绩1"<<'\t'<<"成绩2"<<'\t'<<"成绩3"<<'\t'<<"总分"<<'\t'<<"平均分"<<""<<"名次"< cout<<"----"<<'\t'<<"----------"<<'\t'<<"------"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"-----"<<'\t'<<"----"<<'\t'<<"--------"<<""<<"----"< cout< cout<<"*****************结束**********************"< } } //保存数据到文件 voidsave(student*h) { system("cls"); FILE*fp;//定义指向文件的指针 student*p3;//定义移动指针 charoutfile[30];//保存输出文件名 cout<<"输入保存文件的名字,例如D: \zxc.txt\t";//提示文件名格式信息 cin>>outfile; if((fp=fopen(outfile,"wb"))==NULL)//为输出打开一个二进制文件,如没建立 { cout<<"不能打开文件! "< exit (1); } cout<<"正在保存......."< p3=h;//移动指针从头指针开始 while(p3! =NULL) { fwrite(p3,sizeof(student),1,fp);//写入一条记录 p3=p3->next;//指针后移 } fclose(fp);//关闭文件 cout<<"--------保存成功! ---------\n"; } //从文件读数据 student*load() { system("cls"); student*ps3,*pend3,*h=NULL; FILE*fp;//定义指向文件的指针 charinfile[30];//保存文件名 cout<<"输入要读取文件的名字,例如D: \zxc.txt\n"; cin>>infile;//输入文件名 if((fp=fopen(infile,"rb"))==NULL)//打开一个二进制文件,为读方式 { cout<<"不能打开"< exit (1); } cout<<"------读取文件中! ------"< ps3=newstudent; h=ps3; while(! feof(fp))//循环读数据直到文件尾结束 { if(1! =fread(ps3,sizeof(student),1,fp)) break; ps3->next=newstudent; pend3=ps3;//保存当前结点的指针,作为下一个结点的前驱 ps3=ps3->next; } pend3->next=NULL; fclose(fp); cout<<"----你已经成功从文件中读取数据----\n"; returnh; } //计算总分和均值 /*-voidcomputer(student*h) { student*p4; inti=0; longs=0; floataverage=0; p4=h; system("cls"); while(p4! =NULL) { s+=p4->sum; i++; p4=p4->next; } average=(float)s/i; cout<<"所有学生的总分是"< }*/ //排序 student*sort(student*h) { system("cls"); inti=0;//保存名次 student*p5,*q5,*h1,*t; h1=h->next;//将原表的头指针所指的下一个结点作头指针 h->next=NULL;//第一个结点作为新表的头结点 while(h1! =NULL)//当原表不为空时,惊醒排序 { t=h1;//取原表的头结点 h1=h1->next;//原表结点指针后移 p5=h;//设定移动指针p,从头指针开始 q5=h;//设定移动指针q为p的前驱初值为头指针 while(t->sum =NULL)//作总分比较 { q5=p5;//待排序点值小,则新表指针后移 p5=p5->next; } if(p5==q5)//p=q说明排序点值小,应排在首位 { t->next=p5;//待排序点后继为p h=t;//新头结点为待排序点 } else//待排序点应插入在中间某个位置q和p之间,如p为空指针尾部 { t->next=p5;//后继是p q5->next=t; } } p5=h;//已排好序的头指针赋给p,准备填写名次 while(p5! =NULL)//当p不为空时,进行下列操作 { i++;//结点序号 p5->order=i;//将名次赋值 p5=p5->next;//指针后移 } cout<<"排序成功! \n"; returnh;//返回头指针 } /*student*index(student*h) { inti=0;//保存名次 student*p6,*q6,*h11,*t1; h11=h->next;//将原表的头指针所指的下一个结点作头指针 h->next=NULL;//第一个结点作为新表的头结点 while(h11! =NULL)//当原表不为空时,惊醒排序 { t1=h11;//取原表的头结点 h11=h11->next;//原表结点指针后移 p6=h;//设定移动指针p,从头指针开始 q6=h;//设定移动指针q为p的前驱初值为头指针 while(strcmp(t1->no,p6->no)>0&&p6! =NULL)//作总分比较 { q6=p6;//待排序点值小,则新表指针后移 p6=p6->next; } if(p6==q6)//p=q说明排序点值小,应排在首位 { t1->next=p6;//待排序点后继为p h=t1;//新头结点为待排序点 } else//待排序点应插入在中间某个位置q和p之间,如p为空指针尾部 { t1->next=p6;//后继是p q6->next=t1; } } p6=h;//已排好序的头指针赋给p,准备填写名次 while(p6! =NULL)//当p不为空时,进行下列操作 { i++;//结点序号 p6->order=i;//将名次赋值 p6=p6->next;//指针后移 } cout<<"索引排序成功! \n"; returnh;//返回头指针 } //追加文件记录 voidappend() { system("cls"); FILE*fp; student*info; ints1,i; charinfile[30]; cout<<"请输入新的学生成绩信息"<<'\n'; info=newstudent; cout<<"输入班级: "; cin>>info->cla; cout<<"输入学号: "; cin>>info->no; cout<<"输入姓名: "; cin>>info->name; cout<<"请输入"< s1=0; for(i=0;i { do{ cout<<"输入第"< cin>>info->score[i]; if(info->score[i]>100||info->score[i]<0) cout<<"数据错误,请重新输入"< }while(info->score[i]>100||info->score[i]<0); s1=s1+info->score[i]; } info->sum=s1;//保存总分 info->average=(float)s1/N;//求均分 info->order=0;//名次初始值为0 info->next=NULL;//将新记录后继指针赋值为空 cout<<"输入要读取文件的名字,例如E: \zxc.txt\n"; cin>>infile; if((fp=fopen(infile,"ab"))==NULL)//向二进制文件尾增加数据方式打开文件 { cout<<"不能打开文件"< exit (1); } cout<<"\n------正在写入文件.....------\n"; if(1! =fwrite(info,sizeof(student),1,fp))//写文件操作 { cout<<"----文件写入错误! ----\n"; return; } cout<<"----写入成功! ----"< fclose(fp); }*/ //分类合计 /*voidtotal(student*h) { system("cls"); inti=0; floats[N]={0},a[N]={0}; while(h! =NULL) { s[0]+=h->score[0]; s[1]+=h->score[1]; s[2]+=h->score[2]; h=h->next; i++; } a[0]=s[0]/i; a[1]=s[1]/i; a[2]=s[2]/i; cout<<"成绩1: "<<"---\t"<<"成绩2"<<"---\t"<<"成绩3-----"< cout<<"总分: "<<'\t'<<"均分: "<<'\t'<<"总分: "<<'\t'<<"均分: "<<'\t'<<"总分: "<<'\t'<<"均分: "< cout< }*/ //菜单函数,返回值为整数 intmenu() { cout<<"================菜单=======================================\n", cout<<"|0.链表的初始化|\n", cout<<"|1.输入学生成绩|\n", cout<<"|2.删除学生成绩|\n", cout<<"|3.显示学生成绩|\n", cout<<"|4.按姓名找学生|\n", cout<<"|5.保存学生成绩|\n", cout<<"|6.读取学生成绩|\n", cout<<"|7.退出|\n", cout<<"|========================================================|\n"< return0; }; /*cout<<"\n按任意一键进入主菜单......\n";getch(); intc,i; //输入任一键 system("cls"); cout<<"欢迎使用我的学生成绩管理系统"< for(i=0;i<14;i++) { cout<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c+课设 学生成绩管理系统 c+ 学生 成绩管理系统
![提示](https://static.bdocx.com/images/bang_tan.gif)