数据结构大作业实验报告.doc

上传人:仙人指路1688 文档编号:2396649 上传时间:2023-02-17 格式:DOC 页数:25 大小:803.50KB
返回 下载 相关 举报
数据结构大作业实验报告.doc_第1页
第1页 / 共25页
数据结构大作业实验报告.doc_第2页
第2页 / 共25页
数据结构大作业实验报告.doc_第3页
第3页 / 共25页
数据结构大作业实验报告.doc_第4页
第4页 / 共25页
数据结构大作业实验报告.doc_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《数据结构大作业实验报告.doc》由会员分享,可在线阅读,更多相关《数据结构大作业实验报告.doc(25页珍藏版)》请在三一办公上搜索。

1、数据结构实验报告-学生成绩分析系统学校 南京大学院系 工程管理学院专业 管理科学与工程类年级 2010级课题 学生成绩分析系统指导老师 朱美琳小组成员信息姓名学号叶皓恺101279055殷承来101279056于婴朴101279058周道航101279062摘要一 需求分析3二 概要设计4一 算法设计4二 存储结构设计5三 详细设计5四 调试分析18一 调试结果18二 时间复杂度分析24三 程序中存在问题以及可能改进的地方24五 总结25一 需求分析本成绩分析管理系统可以实现以下主要功能:1.信息的输入:建立学生档案文件 (包括姓名,学号,班级,课程编号,成绩)2.信息的维护: 添加:增加新学

2、生 修改:学生信息的改变 删除:学生减少 3.信息的处理 按要求检索学生信息 按要求统计信息 本成绩分析管理系统同时可以实现以下系统界面:1. 管理员进入 请输入密码:2. 一级菜单 1.信息维护 输入“1”进入信息维护二级菜单2.信息检索 输入“2”进入信息检索二级菜单3.信息统计 输入“3”进入信息统计二级菜单4.退出 输入“4”退出系统3. 二级菜单 信息维护 1.建立学生成绩文件 2.添加学生纪录 3.删除学生纪录 4.修改学生纪录 5.返回上级菜单 信息检索 1. 按姓名查找 2. 按班级查找 3. 返回上级菜单信息统计 1.成绩统计 2.返回上级菜单 二 概要设计一 算法设计1.

3、用口令(密码)形式验证管理员身份(可输入三次密码),合法者进入,否则程序结束。算法实现可以使用break和continue语句,使用一个变量计数; 2. 有关功能说明(1)建立学生成绩表 void establish(void); /建立学生成绩表函数建立新的学生纪录(包括姓名,学号,班级,课程编号,成绩) (暂定为2个班级,2门课程,学生个数每班10人左右)算法实现可以使用fp头文件指针,将指定的记录写入相应的文本文件中;(2) 添加学生纪录 void add(void); /添加学生纪录函数在已存在的学生成绩文件中添加新纪录 算法实现同样利用文件操作将新添加的记录追加到文件的尾部即可;(3

4、) 删除学生纪录 void deleteinfo(void); /删除学生记录函数在学生成绩文件中删除2个课程没有成绩的学生纪录 删除前,逐条显示符合删除条件的学生姓名,成绩,确认后再删除 算法实现先在文件中将记录读出,再寻找删除项,最后将其重新写入文本文件中;(4)修改学生信息 void modify(void); /修改学生记录函数输入学生学号,在学生成绩文件中找出该学生纪录 在屏幕上逐条显示该学生的各条纪录 每显示一条,询问是否修改,如果“1,输入修改后的数据,文件原记录删除,保存新的记录 算法实现与删除学生记录相似就是将原文件内容读出,后根据条件修改内容,最后再重新写入文件中;判断是否

5、修改时,利用if循环就可以了;(5) 按姓名和班级查找 输入姓名,显示该学生所有信息 void searchname(void); /按姓名查找学生记录函数输入班级,显示所有学生信息 void searchclass(void); /按班级查找学生记录函数算法实现先将文本内容读出,利用条件查找相应的记录,再将相应的记录输出(6) 信息统计 void tongji(void); /统计学生成绩信息函数同时按照班级和课程统计每门课程,每个课程每个班级的平均成绩,最高分,最低分 在屏幕上先依次显示各门课程,对应的各个班级的统计数据。 算法实现利用文件操作将学生成绩表中内容读出,然后利用循环语句将对应

6、的统计项找到,输出结果(7)退出信息管理系统,返回操作系统利用switch case语句二 存储结构设计因为每个学生纪录包括姓名,学号,班级,课程编号,成绩,所以要使用结构变量,同时考虑到处理数据的数量,我们采用结构数组来完成程序的实现,具体定义如下;struct studentchar name20; /学生的姓名long n; /学生的学号char classnum10; /学生的班级char coursenum210; /学生的所有课程编号int grade2; /学生的各科的成绩 STUmaxsize; /最大数据容量常数maxsize三 详细设计C语言源代码如下:/*-头文件定义-*

7、/#include #include #include #include /*-*/#define maxsize 20 /定义最大数据容量常数maxsize/*-数据类型定义-*/ struct studentchar name20; /学生的姓名long n; /学生的学号char classnum10; /学生的班级char coursenum210; /学生的所有课程编号int grade2; /学生的各科的成绩 STUmaxsize;/*-*/*-函数列表-*/void establish(void); /建立学生成绩表函数void add(void); /添加学生纪录函数void

8、deleteinfo(void); /删除学生记录函数void modify(void); /修改学生记录函数void searchname(void); /按姓名查找学生记录函数void searchclass(void); /按班级查找学生记录函数void tongji(void); /统计学生成绩信息函数/*-*/*=-主函数-*/int main(void)int count,i,j;char password15=1B620,password115; /其中password为管理员密码;printf(-欢迎来到南京大学学生成绩分析系统-n);/*-管理员密码验证-*/for(coun

9、t=0;count3;count+) /用密码形式验证管理员身份(可输入三次密码),合法者进入,否则程序结束printf(-请输入密码:-n);gets(password1);if(strcmp(password1,password)=0)break;elsecontinue;/*-*/if(count=3) return 0; /身份验证次数超过3次,程序结束;else if(count3) /*-一级菜单-*/ loop: /loop是回到一级菜单的语句标号printf(-1 信息维护-n);printf(-2 信息检索-n);printf(-3 信息统计-n);printf(-4 退出-

10、n);/*-*/scanf(%d,&i);switch(i)case 1:/*-信息维护的二级菜单-*/ lo: /lo是回到信息维护二级菜单的语句标号printf(-1 建立学生成绩文件-n);printf(-2 添加学生记录-n);printf(-3 删除学生记录-n);printf(-4 修改学生记录-n); printf(-5 返回上级菜单-n);/*-*/scanf(%d,&j); switch(j)case 1:establish();goto lo; /调用建立学生成绩表函数;并且调用完之后返回信息维护二级菜单 case 2:add();goto lo; /调用添加学生纪录函数;

11、并且调用完之后返回信息维护二级菜单case 3:deleteinfo();goto lo; /调用删除学生记录函数;并且调用完之后返回信息维护二级菜单case 4:modify();goto lo; /调用修改学生记录函数;并且调用完之后返回信息维护二级菜单case 5:goto loop; /回到一级菜单;break;case 2:/*-信息检索的二级菜单-*/ op: /op是回到信息维护二级菜单的语句标号 printf(-1 按姓名查找-n);printf(-2 按班级查找-n);printf(-3 放回上级菜单-n);/*-*/scanf(%d,&j); switch(j)case 1

12、:searchname();goto op; /调用按姓名查找学生记录函数;并且调用完之后返回信息检索二级菜单 case 2:searchclass();goto op; /调用按班级查找学生记录函数;并且调用完之后返回信息检索二级菜单case 3:goto loop; /回到一级菜单break;case 3:/*-信息统计的二级菜单-*/ to: /to是返回到信息统计的二级菜单的语句标号 printf(-1 成绩统计-n); printf(-2 放回上级菜单-n); /*-*/ scanf(%d,&j); switch(j) case 1:tongji();goto to; /调用信息统计

13、函数;并且调用完之后返回信息统计二级菜单 case 2:goto loop; /回到一级菜单 break; case 4: break; return 0;/*-*/*-建立学生成绩文件函数的具体实现-*/void establish(void) FILE *fp; /定义头文件指针fp;int t,i; printf(please input a number:); /要输入的学生记录个数为t scanf(%d,&t);/*-输入t条学生记录-*/for(i=0;it;i+)scanf(%s%ld%s%s%s%d%d,STUi.name,&STUi.n,STUi.classnum,STUi.

14、coursenum0,STUi.coursenum1,&STUi.grade0,&STUi.grade1);/*-*/*-打开成绩分析管理文本文件并添加学生记录-*/if( ( fp=fopen(成绩分析管理.txt,wb) )=NULL)printf(打开文件错误n); return; /文件打开错误直接返回;for(i=0;iname,&stu-n,stu-classnum,stu-coursenum0,stu-coursenum1,&stu-grade0,&stu-grade1);/*-将该结构变量加到成绩分析管理文本文件的末尾-*/if( fp=fopen(成绩分析管理.txt,ab)

15、 )=NULL) /*打开文件*/printf(打开文件错误n); return;if(fwrite(stu,sizeof(struct student),1,fp)!=1)/*写文件*/ printf(写文件错误n); return;fclose(fp); /*-关闭文件-*/ /*-*/return ;/*-*/*-删除记录函数的具体实现-*/void deleteinfo(void) FILE *fp; /定义头文件指针fp int cnt=0,i=0,flag=0; /flag用作标识符,cnt和i用作计数if(fp=fopen(成绩分析管理.txt,rb)=NULL) /*打开文件*

16、/printf(打开成绩分析管理.txt文件失败n);return;while(imaxsize)if(fread(&STUi,sizeof(struct student),1,fp)=1) /*读文件*/cnt+; /统计文件中记录条数else if(i=0)printf(读文件失败n);break;i+;fclose(fp);/*关闭文件*/*-读取文件中的记录-*/if(fp=fopen(成绩分析管理.txt,rb)=NULL) /*打开文件*/printf(删除时打开文件失败n);return;for(i=0;icnt;i+)if(fread(&STUi,sizeof(struct s

17、tudent),1,fp)!=1) /*先读文件*/printf(读文件错误n);return; fclose(fp); /*关闭文件*/*-*/for(i=0;icnt;i+) if(STUi.grade0=0)&(STUi.grade1=0)/输出各科成绩为0 的学生记录,并对学生的姓名做上标记;printf(%s,%ld,%s,%s,%s,%d,%dn,STUi.name,STUi.n,STUi.classnum,STUi.coursenum0,STUi.coursenum1,STUi.grade0,STUi.grade1);strcpy(STUi.name,#),flag=1;if(!

18、flag) printf(nThere are no records to delete!n );/如果文件中没有满足条件的记录输出该信息/*-将删除后的学生记录写入文件中-*/if(fp=fopen(成绩分析管理.txt,wb)=NULL) /*打开文件*/printf(删除时打开文件失败n);return;for(i=0;icnt;i+) /*写向成绩分析管理文件写内容*/if( strcmp(STUi.name,#)!=0 ) if(fwrite(&STUi,sizeof(struct student),1,fp)!=1) /*写文件*/printf(删除时写文件错误n); return

19、;fclose(fp);/*关闭文件*/*-*/return ;/*-*/*-修改学生记录函数具体实现-*/void modify(void) FILE *fp; /定义头文件指针fplong n1; char name120;char classnum110; char coursenum1210; int grade12,ch,cnt=0,i=0,flag=1; /定义变量 /*-打开成绩分析管理文本文件并读出文件中的学生记录-*/ if(fp=fopen(成绩分析管理.txt,rb)=NULL) /*打开文件*/printf(打开成绩分析管理.txt文件失败n);return;while

20、(imaxsize)if(fread(&STUi,sizeof(struct student),1,fp)=1) /*读文件*/cnt+;else if(i=0)printf(读文件失败n);break;i+;fclose(fp);/*关闭文件*/*-*/printf(nplease input the students number: );scanf(%ld,&n1); /输入要修改的学生记录的学号for(i=0;icnt;i+)if(STUi.n=n1) /找到匹配的学生记录 /*-修改姓名的操作实现-*/printf(n%s,STUi.name); /输出原学生记录的姓名 printf(

21、nplease input 1 or 0!n); /判断是否改名,1代表改名,0代表不改scanf(%d,&ch);if(ch)printf(Please input the new name:); scanf(%s,name1); /输入新姓名; strcpy(STUi.name,name1),flag=0;/flag用作是否改动的判断标志/*-*/*-修改学号的操作实现-*/printf(n%ldnplease input 1 or 0!,STUi.n);/输出原学生记录的学号并判断是否改学号,1代表改学号,0代表不改scanf(%d,&ch);if(ch)printf(please in

22、put the new xuehao:); scanf(%ld,&n1); /输入新学号 STUi.n=n1,flag=0; /flag用作是否改动的判断标志 /*-*/ /*-修改班级的操作实现-*/ printf(n%snplease input 1 or 0!,STUi.classnum);/输出原学生记录的班级并判断是否改班级,1代表改班级,0代表不改scanf(%d,&ch);if(ch)printf(please input the new the classnum:); scanf(%s,classnum1); /输入新班级 strcpy(STUi.classnum,classn

23、um1),flag=0;/flag用作是否改动的判断标志/*-*/ /*-修改课程名的操作实现-*/printf(n%snplease input 1 or 0!,STUi.coursenum0);/输出原学生记录的课程名并判断是否改课程名,1代表改课程名,0代表不改scanf(%d,&ch);if(ch)printf(please input the new coursenum:); scanf(%s,coursenum10); /输入新课程名 strcpy(STUi.coursenum0,coursenum10),flag=0;/flag用作是否改动的判断标志 printf(n%snple

24、ase input 1 or 0!,STUi.coursenum1);/输出原学生记录的课程名并判断是否改课程名,1代表改课程名,0代表不改scanf(%d,&ch);if(ch)printf(please input the new coursenum:); scanf(%s,coursenum11); /输入新课程名 strcpy(STUi.coursenum1,coursenum11),flag=0;/flag用作是否改动的判断标志 /*-*/ /*-修改成绩的操作实现-*/ printf(n%dnplease input 1 or 0!,STUi.grade0); /输出原学生记录的成

25、绩并判断是否改成绩,1代表改成绩,0代表不改scanf(%d,&ch); if(ch)printf(please input the new grade1: ); scanf(%d,grade1); /输入新成绩 STUi.grade0=grade10,flag=0;printf(n%dnplease input 1 or 0!,STUi.grade1); /输出原学生记录的成绩并判断是否改成绩,1代表改成绩,0代表不改scanf(%d,&ch);if(ch)printf(please input the new grade2: ); scanf(%d,grade1+1); /输入新成绩 ST

26、Ui.grade1=grade11,flag=0; /flag用作是否改动的判断标志/*-*/if(flag)printf(Can not find the data!); /如果没有对应的学生记录的学号与已知的学号相匹配/*-将修改好的学生记录重新写入学生成绩分析管理文本文件中-*/ if(fp=fopen(成绩分析管理.txt,wb)=NULL) /*打开文件*/printf(修改时打开文件失败n);return;for(i=0;icnt;i+) /*向成绩分析管理文件中写内容*/ if(fwrite(&STUi,sizeof(struct student),1,fp)!=1) /*写文件

27、*/printf(删除时写文件错误n); return;fclose(fp);/*关闭文件*/*-*/return ;/*-*/*-按姓名查找学生记录函数的具体实现-*/ void searchname(void) FILE *fp;/定义头文件指针fp char s120; int cnt=0,i=0,flag=1; /定义变量/*-打开成绩分析管理文本文件并读出文件中的学生记录-*/ if(fp=fopen(成绩分析管理.txt,rb)=NULL) /*打开文件*/printf(添加时打开成绩分析管理.txt文件失败n);return;while(imaxsize)if(fread(&STUi,sizeof(struct student),1,fp)=1) /*读文件*/cnt+;else if(i=0)printf(读文件失败n);break;i+;fclose(fp);/*关闭文件*/*-*/ printf(n-please input the students name:-n); scanf(%s,s1); /输入要查找的学生姓名 for(i=0;icnt;i+) if(strcmp(STUi.name,s1)=0) /找到匹配结果,输出匹配记录的内容并用flag做标记 flag=0,printf(%s,%ld,%s,%s,%s,%d,%dn

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号