学生成绩管理系统C++程序设计.docx
- 文档编号:26974984
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:20
- 大小:241.04KB
学生成绩管理系统C++程序设计.docx
《学生成绩管理系统C++程序设计.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统C++程序设计.docx(20页珍藏版)》请在冰豆网上搜索。
学生成绩管理系统C++程序设计
项目设计题目(学生成绩管理系统)
学号:
姓名:
自评成绩:
成绩:
1.选题意义、依据
学生成绩系统的设计从学生的应用中而来,学生了解该系统的组成和运行过程,它贴近学生的生活能使学生更加方便的使用各个语句、函数、结构体等。
依据学生期末成绩表的格式。
2.系统功能设计与分析(功能模块说明)
系统主要用于从一个文件夹读入学生信息
(101张三857887
102李斯575960
103王红847987
104赵子龙727576
105李洪磊889889),包括学生学号、姓名、成绩(数学、英语、数据库),程序中引用了八个函数voidCscore(int);voidRank(intave);voidListnumber(inti);voidListscore(inti);voidLookup(int);voidAlter(int);voidDele(int&i);voidInsert(int&i);系统主要实现的功能有:
查询、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)。
Cscore函数主要是对学生进行排名。
具有相同总分的学生具有相同的名次,例如:
第三名和第四名具有相同的总分则在表中不会出现第四名,将出现两个第三名紧接着出现第五名学生的情况。
Rank函数主要用于按平均分对学生进行备注。
把学生分为四个等级:
>90分为excellent,80—90分为medium,60—80分为qualified,<60分为disqualified。
Listnumber函数主要用于把学生的信息(学号姓名数学英语数据库总分平均分名次备注)以学号排名的顺序用表的形式输出,方便学生查看。
Listnumber函数中还调用了Cscore和Rank函数。
Listscore函数是把学生的信息以总成绩排名的形式输出。
Lookup函数主要运用学号或姓名形式查询单个学生信息,如果存在则输出该学生信息(学号姓名数学英语数据库总分平均分名次备注),否则输出“Inputmessageiserror.”。
Alter函数是修改指定学号的学生信息。
主要用于修改指定学号学生的各科成绩并输出修改后的学生信息(学号姓名数学英语数据库总分平均分名次备注)。
Delete函数用于删除指定学生的信息。
可用两种方式删除:
以学号形式删除学生信息,以姓名形式删除学生信息。
若要删除了学生不存在则输出“messageerror.”。
Insert函数用来插入学生的信息,一次调用Insert函数可以添加多个学生的信息。
Insert函数中还调用了Cscore和Rank函数。
3.涉及的主要知识点说明
(1)系统主要运用了函数的声明、定义、调用(值调用和地址调用)。
(2)对文件的读入操作。
(3)在平均分的求取上采用四舍五入的方式,运用了类型转换。
(4)多次运用if和for嵌套,在for嵌套中又运用了break语句。
(5)运用了switch。
(6)对字符数组的比较中运用了strcmp,还运用toupper把小写字母转换成大写。
(7)对学生信息进行的插入和有序删除操作。
(8)运用iomanip对输出进行美观。
4.创新性说明(怎么解决)
创新性:
系统可以对具有相同总分学生的学生输出相同的名次。
若存在三个相同的分数都为第二名,则在输出时出现三个第二名不会出现第三、四名,紧接着出现第五名。
解决方法:
(1)用一个数组记录具有相同分数的人数,数组下标和学生信息所具有的下标相同;
(2)删除相同的总分只保留其中一个分数;(3)对删除相同总分的分数按从高到底进行排序;(4)对各个学生的总分进行排名。
5.源代码
< return1; } for(i=0;i { infile>>stu[i].num>>stu[i].name>>stu[i].math>>stu[i].english>>stu[i].database; stu[i].sum=stu[i].math+stu[i].english+stu[i].database; stu[i].average=int(float(stu[i].sum)/3+; } i=i-1; cout< cout<<"YorN进入菜单栏"< cin>>ch; ch=toupper(ch); while(ch=='Y') { cout< <<"菜单: "< <<"1)查询"< <<"2)修改"< <<"3)删除"< <<"4)插入"< <<"5)成绩单(以学号排名)"< <<"6)成绩单(以名次排名)"< cout<<"***请选择1--4中任何一个: "< cin>>k; cout< switch(k) { case1: Lookup(i);break; case2: Alter(i);break; case3: Dele(i);break; case4: Insert(i);break; case5: Listnumber(i);break; case6: Listscore(i);break; default: cout<<"errorinput! "< } cout< cin>>ch; ch=toupper(ch); } cout<<"Thankyouforusing! "< <<"Byebye! "< (); return0; }um; } for(j=0;j { h[j]=0; for(k=0;k { if(sum0[j]==sum0[k]) { h[j]++;um) { score[j+1]=score[j]+b[j]; stu[k].score=score[j+1]; b[j+1]=h[k]; }um< < cout< cout< cout< Rank(stu[j].average); } } voidListscore(inti) { intj,k; Cscore(i); cout<<"学号姓名数学英语数据库总分平均分名次备注"< for(j=1;j { for(k=0;k { if(stu[k].score==j) { cout< (1)< < cout< cout< cout< Rank(stu[k].average); } } } } voidLookup(inti)< cout<<"1isusenumber,0isusename."< cin>>n; if(n)um) { k=j; break; } } } elseame,name1)==0) { k=j; break; } } if(k==MAX) { cout<<"Inputmessageiserror."< } elseum< < cout< cout< cout< Rank(stu[j].average); } } voidAlter(inti)."< cout<<"Pleaseinputnumber: "; cin>>numb; for(j=0;j { if(numb==stu[j].num) { cout<<"findout: "< cout<<"学号: "< "< cout<<"Pleaseinputnewresult: 数学英语数据库"< cin>>stu[j].math>>stu[j].english>>stu[j].database; stu[j].sum=stu[j].math+stu[j].english+stu[j].database; stu[j].average=int(float(stu[j].sum)/+; Cscore(i); um< < cout< cout< cout< Rank(stu[j].average); break; } } } voidDele(int&i)."< cout<<"Pleaseselect: "< cout<<"[1]以学号形式删除学生信息"< cout<<"[0]以姓名形式删除学生信息"< cin>>k; if(k)um) break; } } elseame)==0) break; } } if(j { for(;j { stu[j].num=stu[j+1].num; strcpy(stu[j].name,stu[j+1].name); stu[j].math=stu[j+1].math; stu[j].english=stu[j+1].english; stu[j].database=stu[j+1].database; stu[j].sum=stu[j+1].sum; stu[j].average=stu[j+1].average; } i=i-1; Cscore(i); } else cout<<"messageerror."< } voidInsert(int&i)."< cout<<"Pleaseinputinsertnumberofpeople: "; cin>>n; i=i+n; cout<<"Pleaseinputinsert: "< cout<<"学号姓名数学英语数据库"< for(j=i-n;j { cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database; stu[j].sum=stu[j].math+stu[j].english+stu[j].database; stu[j].average=int(float(stu[j].sum)/+; } Cscore(i); cout<<"学号姓名数学英语数据库总分平均分名次备注"< for(j=i-n;j { cout< (1)< < cout< cout< cout< Rank(stu[j].average); } } 6.运行结果与分析 运行结果: 分析: 系统基本上能实现对成绩的查询、、修改、删除、插入、成绩单(以学号排名)和成绩单(以名次排名)等功能,并且可以插入多个学生的信息。 但在插入学生后未不能成绩单以学号排名的形式输出。 为了改进程序对Insert函数进行了一下修改。 Insert函数代码如下: voidInsert(int&i)."< cout<<"Pleaseinputinsertnumberofpeople: "; cin>>n; m=i+n; first=0; last=i-1; mid=(first+last)/2; cout<<"Pleaseinputinsert: "< cout<<"学号姓名数学英语数据库"< for(j=i;j { i=i+1; cin>>stu[j].num>>stu[j].name>>stu[j].math>>stu[j].english>>stu[j].database; while(first<=last) { if(stu[j].num { last=mid-1; } elseif(stu[j].num>stu[mid].num) { first=mid+1; } else { break; } mid=(first+last)/2; } if(first>last) { num0=stu[j].num; strcpy(name0,stu[j].name); math0=stu[j].math; english0=stu[j].english; database0=stu[j].database; for(k=i-1;k>first;k--)um=stu[k-1].num; strcpy(stu[k].name,stu[k-1].name); stu[k].math=stu[k-1].math; stu[k].english=stu[k-1].english; stu[k].database=stu[k-1].database; stu[k].sum=stu[k-1].sum; stu[k].average=stu[k-1].average; } stu[first].num=num0; strcpy(stu[first].name,name0); stu[first].math=math0; stu[first].english=english0; stu[first].database=database0; stu[first].sum=stu[first].math+stu[first].english+stu[first].database; stu[first].average=int(float(stu[first].sum)/+; } else { cout<<"messageerror."< } first=0; last=i-1; mid=(first+last)/2; } Cscore(i); } 修改后程序经运行后结果如下: 结果发现修改后的程序运用了二分查找法、多重嵌套等,能较好的实现对学生的信息以学号为序进行了多个数据的有序插入。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统 C+ 程序设计
![提示](https://static.bdocx.com/images/bang_tan.gif)