1、C+学生成绩查询统计制作人:学 号:vc+课程设计报告学生成绩管理简易系统一课程设计目的 深入理解向对象程序设计思想,运用已学知识设计简易的学生成绩管理系统,提高分析解决实际问题的能力。二.设计要求 本系统用来管理若干个学院(系)、若干个班级的学生成绩,系统具有如下主要功能: 成批成绩输入,即从一个固定格式中读入学生成绩,放入学生成绩。 交互成绩输入,从屏幕上一个一个地录入学生成绩,放入学生成绩。 查询(打印)某班级某门课的最高分、最低分、平均分及成绩清单(可按学号排序、按分数由高到低排序等)。 查询(打印)学生(可按学号、按姓名查询)某学期的成绩清单(假定每人每学期最多能学8门课)。 修改和
2、删除某学生的某门课成绩。 增加、修改、删除和查询(打印)学生的基本资料。 根据学号查任课教师,根据教师代号查所教学生。三.设计总体框架程序数据处理流图每一个功能块的算法流程图1、 建立链表2、排序3、插入(增加)3、 查找5、删除6、 统计7根据学生查找老师,根据教师代号查所教学生 8根据教师代号查所教学生五数据文件格式说明 学生基本资料文件struct student char num15; char name15; char major15; char grade15; char clas15; char teacher15; char sex5; float birthday10; fl
3、oat score8; node *next; head;学生成绩资料文件struct score char num15; float subjectmun10; float item5; float score; char teacher15;课程代号对照表文件struct subjectmun float subjectmun10; char subject10; float scoreweight;教师代号对照表文件struct teachermun float teachermun10; char teachername10; char quality10;6. 输入输出方法stude
4、nt input(student x) cout请输入学生的相关信息,以学号为字符0结束(其他项任意,但要输入!):endl; cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 s1s2s3s4s4s5s6s7s8c1c2c3; return x; student output(student x) cout 学号x.num姓名 x.name系x.major 班级 x.clas老师teacher性别 x.sex生日x.birthdayendl; 六主要数据类型及其作用(数据结构)学生类型结构体记录学生基本资料,学生成绩类型结构体记录学生成绩,课程代号对照表结构体,师代号对照表结构体为
5、程序中根据学号查任课教师和根据教师代号查所教学生提供依据。七主要函数说明及其原代码建立链表node *GradeManage:create(void) node *p1,*p2,*head=0; char s115,s225,s315,s415,s515,s65,s710,s810; float c1,c2,c3; cout请输入学生的相关信息,以学号为字符0结束(其他项任意,但要输入!):endl; cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 s1s2s3s4s4s5s6s7s8c1c2c3; while(strcmp(s1,0)!=0) p1=new node; strcp
6、y(p1-num,s1); strcpy(p1-name,s2); strcpy(p1- major,s3); strcpy(p1- grade,s4); strcpy(p1-clas,s5); strcpy(p1-teacher,s6); strcpy(p1-sex,s7); p1-score1=c1; p1-score2=c2; p1-score3=c3; if(head=0) head=p1;p2=p1; else p2-next=p1;p2=p1; size+; cout继续输入s1s2c1c2c3; cout输入结束!endl; for (int i=0;i80;i+) coutne
7、xt=0; return(head);2、排序node *GradeManage:sort(node* head) node *p; p= new node*size; if(head=0) cout链为空,产生错误!next=0) cout只有一个数据!endl; return(head); else node *temp; p0=head; int i; for(i=1;inext; psize-1-next=NULL; for(i=0;isize;i+) for(int j =0; jnum,pj+1-num)0) temp=pj;pj=pj+1;pj+1=temp; psize-1-n
8、ext=NULL; head=p0; for(int i=1;inext=pi; psize-1-next=0; cout排序后:endl; print(head); delete p; return(head);3查找void GradeManage:search(node *head,char *p) node *p1,*p2; if(head=0) coutnum,p)=0) p1=head; cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 endl; coutnum name major grade clas teacher sex next; while(p2-next&
9、strcmp(p2-num,p)!=0) p1=p2;p2=p2-next; if(strcmp(p2-num,p)=0) cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 endl; coutnum name major grade clas teacher sex endl; else cout链上没有找到要找的学生信息!next; delete p; 5求平均分node *fun (node *head,float &aver) student *h,*p,*p1; float sum=0; int n=0; aver=0;h=NULL; p=head; while(p!=nu
10、ll) sum+=p-grade; n+; p=p-next; aver=sum/n;4、程序代码#include#includeint size=0;struct node char num15; char name15; char major15; char grade15; char clas15; char teacher15; char sex5; float birthday10; float score8; node *next; head;class GradeManage public: node *create(void); void print(const node *h
11、ead); node *sort(node *head); node *insert(node *head,node *p); void search(node *head,char *p); node *Deleteonenode(node *head,char *p); void DeleteChain(node *head);node *GradeManage:create(void) node *p1,*p2,*head=0; char s115,s225,s315,s415,s515,s65,s710,s810; float c1,c2,c3; cout请输入学生的相关信息,以学号为
12、字符0结束(其他项任意,但要输入!):endl; cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 s1s2s3s4s4s5s6s7s8c1c2c3; while(strcmp(s1,0)!=0) p1=new node; strcpy(p1-num,s1); strcpy(p1-name,s2); strcpy(p1- major,s3); strcpy(p1- grade,s4); strcpy(p1-clas,s5); strcpy(p1-teacher,s6); strcpy(p1-sex,s7); p1-score1=c1; p1-score2=c2; p1-score3=
13、c3; if(head=0) head=p1;p2=p1; else p2-next=p1;p2=p1; size+; cout继续输入s1s2c1c2c3; cout输入结束!endl; for (int i=0;i80;i+) coutnext=0; return(head);void GradeManage:print(const node *head) const node *p=head; cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 endl; while(p!=0) coutnum name major grade clas teacher sex next; fo
14、r (int i=0;i80;i+) cout-; coutn;node *GradeManage:sort(node* head) node *p; p= new node*size; if(head=0) cout链为空,产生错误!next=0) cout只有一个数据!endl; return(head); else node *temp; p0=head; int i; for(i=1;inext; psize-1-next=NULL; for(i=0;isize;i+) for(int j =0; jnum,pj+1-num)0) temp=pj;pj=pj+1;pj+1=temp;
15、psize-1-next=NULL; head=p0; for(int i=1;inext=pi; psize-1-next=0; cout排序后:next=0;return(p); if(strcmp(head-num,p-num)=0) p-next=head; return(p); p2=p1=head; while(p2-next&strcmp(p2-num,p-num)next; if(strcmp(p2-num,p-num)next=p;p-next=0; else p-next=p2;p1-next=p; return(head);void GradeManage:search(
16、node *head,char *p) node *p1,*p2; if(head=0) coutnum,p)=0) p1=head; cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 endl; coutnum name major grade clas teacher sex next; while(p2-next&strcmp(p2-num,p)!=0) p1=p2;p2=p2-next; if(strcmp(p2-num,p)=0) cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 endl; coutnum name major grade clas teache
17、r sex endl; else cout链上没有找到要找的学生信息!endl; return;node *GradeManage:Deleteonenode(node *head,char *p) node *p1,*p2; if(head=0) cout链为空,无法找到所要删除的学生信息!num,p)=0) p1=head; head=head-next; delete p1; cout*已成功删除!*next; while(p2-next&strcmp(p2-num,p)!=0) p1=p2;p2=p2-next; if(strcmp(p2-num,p)=0) p1-next=p2-ne
18、xt; delete p2; cout*已成功删除!*endl; else cout*链上没有找到要删除的学生信息!*next; delete p; int main() GradeManage class1; node *head;char s115,s225,s315,s415,s515,s65,s710,s810; float c1,c2,c3; node *p1; head=class1.create(); /新建链表 class1.print(head); cout请输入要插入学生的信息!endl; /完成插入功能 cout 学号 姓名 系 班级 老师 性别 生日 各科成绩 s1s2
19、s3s4s4s5s6s7s8c1c2c3; p1=new node; strcpy(p1-num,s1); strcpy(p1-name,s2); strcpy(p1- major,s3); strcpy(p1- grade,s4); strcpy(p1-clas,s5); strcpy(p1-teacher,s6); strcpy(p1-sex,s7); p1-score1=c1; p1-score2=c2; p1-score3=c3; head=class1.insert(head,p1); cout插入后:endl; class1.print(head); size+; /完成排序功能 head=class1.sort(head); char s915; /完成查找功能 couts9; class1.search(head,s3); for (int i=0;i80;i+) cout-; couts10;he
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1