2022年数据结构课程设计 4

上传人:m**** 文档编号:567512029 上传时间:2024-07-21 格式:PDF 页数:39 大小:1,002.83KB
返回 下载 相关 举报
2022年数据结构课程设计 4_第1页
第1页 / 共39页
2022年数据结构课程设计 4_第2页
第2页 / 共39页
2022年数据结构课程设计 4_第3页
第3页 / 共39页
2022年数据结构课程设计 4_第4页
第4页 / 共39页
2022年数据结构课程设计 4_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《2022年数据结构课程设计 4》由会员分享,可在线阅读,更多相关《2022年数据结构课程设计 4(39页珍藏版)》请在金锄头文库上搜索。

1、1 计算机科学与技术学院课程设计成绩单课程名称:数据结构课程设计姓名xxx 性别x 学号xxx 班级xxx 班综合成绩成绩等级程序运行情况(占总成绩 20%)能正确运行基本能正确运行能运行但结果不完善(20 分)(15 分)(10分)程序功能的完善程度(占总成绩 10%)完善基本完善不完善(10 分)(8 分)(5 分)程序结构的合理性(占总成绩 10%)合理基本合理不太合理(10 分)(8 分)(5 分)对问题的答辩情况(占总成绩 40%)概念正确有创新能正确回答所有问题基本能正确回答(40分)(35 分)(30分)部分问题回答概念不清晰(20分)学生的工作态度与独立工作能力(占总成绩 10

2、%)工作态度认真能独立完成任务工作态度认真但独立性较差(10 分)(8 分)工作态度基本认真但缺乏独立性(5 分)设计报告的规范性(占总成绩 10%)符合规范基本符合规范规范性较差(10 分)(8 分)(5 分)优秀: 90 分100 分 良好: 80 分89 分 中等: 7079 分 及格: 6069 分 不及格 0 分59 分武汉科技大学计算机科学与技术学院制表名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 39 页 - - - - - - - - - 2 目录引言-

3、3 一、问题描述 - 二、需求分析- 三、详细设计 - 四、所遇到的问题和分析解决- 五、系统特色及关键技术- 六、结论及心得体会 - 七、附录(源代码) - 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 39 页 - - - - - - - - - 3 引言通过本课程设计, 使自己更加系统地理解和掌握数据结构的基本概念;能自如地根据实际要求,设计相应的数据结构,并运用C 或 C+语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题,进一步加深、巩固所学专业课

4、程的基本理论知识, 理论联系实际, 进一步培养自己综合分析问题和解决问题的能力。掌握C 语言或 C+语言独立的编写、调试应用程序和进行其它相关设计的技能。此项目主要是考察我们对结构体、数组、文件等具体操作,以及对C 语言语法的掌握,所以做成此项目要求比较高的设计要求,对整体有很熟悉的概括,同时调试过程也是很重要的, 对程序界面的要求也比较高, 要设计的合理同时也要美观一点, 能够人性化的描述清楚你的各个功能,一目了然, 对其他用户使用本程序简单易懂,这才能成本程序或本系统是成功的。对于学生成绩管理系统, 此项目每年都有学生去做, 但是能够在其他项目中脱颖而出, 还要有自己的设计特色, 用简单的

5、语言详细描述系统的功能,这才是关键。这个设计能够练习我们的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,学会调试一个比较长的程序的基本方法,同时掌握书写程序设计开发文档的能力。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 39 页 - - - - - - - - - 4 一问题描述1、课程设计应完成的工作(1)编写算法(2)算法测试,并有具体的测试结果和结果分析(3)撰写课程报告,内容包括:封面目录课程设计报告正文使用说明参考文献2、总体设计

6、工作(包含几大功能模块)1. 显 示 本 学 期 考 核 的 7 门 科 目 信 息 以 供 学 生 选 课 ; 2. 输 入 学 生 基 本 信 息 并 显 示; 3. 输 入 学 生 的 选 课 信 息; 4. 查 找 某 学 生 的 信 息 及 选 修 科 目 的 信 息; 5. 修 改 某 学 生 的 信 息; 6. 增 加 一 个 学 生 的 记 录; 7. 删 除 某 个 学 生 的 记 录; 8. 按 学 号 降 序 排 序,依 次 输 出; 9. 将 学 生 的 信 息 存 储 入 文 件。二、 需求分析1、系统描述该系统实现对若干个大学生的学习成绩进行管理。至少包括以下信息:

7、结构体:学生,选修科目,选修信息学生: 学号,姓名,性别,年龄,所属院系选修科目: 科目编号,科目名称,科目学分选修信息: 选修该科目者学号,科目编号,科目成绩名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 39 页 - - - - - - - - - 5 2、功能要求1使用中文菜单,界面设计和用户输入输出要人性化些;2. 将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构

8、进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中;3具有数据输入功能,输入的数据能最终保存在文件中;4具有数据删除功能,能最终从文件中删除;5排序功能,根据自己设计的数据结构,设计排序算法;6具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;7. 学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)。考查点:插入时注意学号的处理,可以不填吗,是否重复 ,其他数据是否可以乱填,如何控制 ; 删除时一要防止误操作,二要考虑该生的选课信息,如何处理; 修改时同样要考虑各数据项的性质;对选修表进行插入、删除、修改操作;查询要求可以实现多条件查询。有 3 个

9、文件:Student.txt 中的内容:Sno Sname Ssex Sage Sdept 20120001 李勇男20 CS 20120002 刘晨女19 CS 20120003 王敏女18 MA 20120005 张立男19 IS Course.txt 中的内容:Cno Cname Ccredit 1 英语4 2 数学2 3 信息系统4 4 操作系统3 5 数据结构4 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 39 页 - - - - - - - - - 6 6

10、 数据处理2 7 C/C+ 4 SC.txt 中的内容:Sno Cno Grade 20120001 1 90 20120001 2 80 20120001 4 85 20120002 1 86 20120003 3 82 20120003 5 88 20120005 7 90 3、开发环境Visual C+ 不仅仅是是一个C+编译器,而是一个基于Windows 操作系统的可视化集成开发环境,这种环境开发出来的软件稳定性好、可移植性强, 可以编制各种各样的Windows 应用程序。三、详细设计1、系统流程图开始主界面显示信息科目输入学生信息输入选修信息查找学生信息修改学生信息增加学生信息删除学

11、生信息信息存入文件退出本系统结束名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 39 页 - - - - - - - - - 7 2、界面设计主界面: 在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1 ,即可显示本学期考核的7 门科目信息)在本界面里用户可以输入学生相关的信息数据,按照提示进行操作即可,例如名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -

12、 - - - - - 第 7 页,共 39 页 - - - - - - - - - 8 所有操作均有提示语,比较人性化的管理,易懂,简单。3、大概设计模块(1)先编入系统所需的库函数,从而使程序可运行。#include #include #include #include /文件和标准控制台的输入输出(2)Main() 函数的设计在 main()函数中主要运用do-while 循环语句和switch()-case 选择判断语句来调用相关功能模块。系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。(3)主界面的设计在主界面中包括 “显示本学期考核的

13、7 门科目信息以供学生选科目输入学生基本信息并显示输入学生的选课信息查找某学生的信息及选修科目的信息修改某学生的信息增加一个学生的记录删除某学生的记录按数据结构降序(冒泡 )排序将学生的信息存储入文件退出”等全部的功能, 之所以设计这麽一个主界面,一是因为能使用名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 39 页 - - - - - - - - - 9 户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统不会打开文件紊乱或者出

14、现致命的错误。每个函数体如下:Int main(); /主函数void save(); /选修课程文件存储void load(); /选修课程文件输出void input(struct student *headp); /学生信息的输入void xuxiuinput(struct student *headp,struct StuCourse SC);/选修信息的输入void find(struct student *headp,struct StuCourse SC);/查找学生的信息及选修信息int modify(struct student *headp,struct StuCourse

15、 SC);/修改学生信息及选修信息void insert(struct student *headp,struct StuCourse SC);/ 增加一个学生的信息void shanchu(struct student *headp,struct StuCourse SC);/ 删除一个学生的信息void sort(struct student *headp); /学生信息按学号大小排序void filesave(struct student *headp,struct StuCourse SC);/ 学生信息及选修信息录入文件void fileload(struct student *he

16、adp,struct StuCourse SC);/ 文件信息输出4、详细设计思想(1)确定语言算法由于之前都没有做过类似的设计,所以一时间不能够确定到底使用何种语言来设计本系统,所以在网上看了一些其他人设计的程序,链表的、数组的,C+的,各种各样的,也不知如何选择,但是仔细地看了其中的设计思想,最终还是用C 和链表的来做,一是觉得本人对指针数组掌握的不是很熟练,那么在设计过程中容易产生不能理解的错误,耽误时间,二是想运用C,可以巩固一下所学的数据结构的知识,之前做实验的时候一直用C+来做,都没怎么用所学的知识,这时候想练练。就这样确定了整体的结构算法。(2)确定程序主要功能模块这个就比较简单

17、了,主要是根据系统设计的说明及要求来设计,从而设计了十大功能模块,有文件操作,有系统维护功能,排序和统计功能,有输入输出等基本功能,比较人性化, 添加了较多的提示语。这个程序的主要功能时输入学生的学号,姓名,学期和三科成绩来对其进行存储,在存储后可以对学生的成绩按学号及学期或姓名及学期来进行查询,同时输出此同学的平均分及总分,之后可以对某个同学的成绩进行各种操作,例如修改, 删除等,同时还可以对学生们的成绩按照总分或单科成绩排序,在整个过程中所做的操作都会保存到 student.txt 文件中并显示。(3)系统结构体的设计名师资料总结 - - -精品资料欢迎下载 - - - - - - - -

18、 - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 39 页 - - - - - - - - - 10 struct student /结构体 long Snum;/学号char Sname20;/姓名char Ssex10;/性别int Sage;/年龄char Sdept10;/ 所属院系struct student *next;/ 指针; struct Course/结构体 int Cno;/ 选修科目编号char Cname20;/ 信息科目名称int Credit;/ 信息科目学分;学号姓名性别年龄所属院系学生科目编号名称学分选修名师资

19、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 39 页 - - - - - - - - - 11 struct StuCourse/结构体 long Sno;/选修者学号int SCno;/选修科目编号double Grade;/选修科目成绩; (4)各功能模块的设计*主函数模块用函数 int main()来实现主要是来显示主菜单,使用户选择操作。 首先定义一个指针数组(全局使用) StuCourse SCSIZE( SIZE=1000) , ; 在此处 SIZE 是指数组

20、大小, 之前有定义的, 在这里应用了do-while和 switch-case语句来进行选择,是个比较简单实现的模块。最后若选择“0”则是退出永真循环。*选修课程的文件输入(出)模块用函数 void save();与 void load();来实现主要用来将已定义的结构体数组Course 存储入文件Course.txt,以及将其中数据从文件 Course.txt中输入。void save()/录入文件 FILE *fp; int i; if(fp=fopen(Course.txt,w)=NULL) printf(无法打开此文件!n); exit(0); for(i=0;i7;i+) if(fw

21、rite(&Coi,sizeof(struct Course),1,fp)!=1) printf(无法打开文件Course.txt!n); 学号编号成绩名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 39 页 - - - - - - - - - 12 fclose(fp); void load()/导出文件 FILE *fp; int i; if(fp=fopen(Course.txt,r)=NULL) printf(无法打开文件Course.txt!n); exit(

22、0); for(i=0;i7;i+) fread(&Coi,sizeof(struct Course),1,fp); printf(%4d%10s%8dn,Coi.Cno,Coi.Cname,Coi.Credit); fclose(fp); *输入学生记录模块用函数 void input(struct student *headp);来实现主要功能用来对学生的信息进行收集和输入。首先会跳出主菜单,选择”2”,进入输入模块输入所需学生个数的学生信息,比如学号,姓名,性别,年龄及所属院系(以学号为0 结束输入新的学生信息)等。输完之后会自动跳出主菜单,根据主菜单来在此基础上进行操作。期间会有一些提

23、示语,按此操作即可。根据if和 for语句来判定期间是否有重复学号输入,在本操作中,允许有重复学生姓名出现。在此模块中,同时也用到了一个控制变量a,它是用来判定的条件变量。之后返回主菜单。*输入选修信息模块用函数 void xuxiuinput(struct student *headp,struct StuCourse SC)来实现主要功能用于选修信息的录入。首先会跳出主菜单,选择“3“,进入输入模块输入所需选修科目的个数,接着输入选修该科目者的学号及科目编号及成绩。根据 for-while语句来控制,期间会有提示语。在本操作中,不允许学号的重复,科目编号控制在1-7 。名师资料总结 - -

24、 -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 39 页 - - - - - - - - - 13 *查找学生及选修信息模块用函数 void find(struct student *headp,struct StuCourse SC)实现主要功能用于学生基本信息的查找以及选修信息的查找。首先会跳出主菜单,选择” 4, 接着选择查找的方式(1. 学号查找 2. 姓名查找),输入学号(姓名),便会显示拥有该学号(姓名)学生的基本信息;对于选修信息也是同样。该模块运用了for-while语句,

25、对于学号,科目编号等进行控制,避免重复等情况出现。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 39 页 - - - - - - - - - 14 *修改学生及选修信息模块用函数 int modify(struct student *headp,struct StuCourse SC)实现主要功能是修改学生的基本信息以及选修科目的信息。首先跳出主菜单,选择5。输入你想要修改的学生的学号, 接着会弹出一个提示语请输入你想修改的学生信息的标号:1. 学号 2. 姓名 3.

26、性别 4. 年龄 5. 所属院系 6. 选修科目信息:,选择想要修改的选项,例如1,接着输入新的学号,修改成功。在本模块中运用了if-else语句及 while 语句来控制变量,只有正确输入才会弹出循环,正确显示。*插入学生记录及选修信息模块用函数 void insert(struct student *headp,struct StuCourse SC)实现主要功能是插入一个新的学生记录,并将该学生的选修信息录入到StuCourse 中。首先弹出主菜单,选择6,输入新增加的学生的学号,接着输入该学生的选修信息,然后再输入学生的姓名,年龄等信息。 在本模块中同样使用while语句以及if-el

27、se语句来控制学号等的输入。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 39 页 - - - - - - - - - 15 *删除学生记录以及选修信息模块用函数 void shanchu(struct student *headp,struct StuCourse SC)来实现主要功能是删除一个学生的记录并删除其中StuCourse中的记录。首先有个选择的操作,之后会有判断语句,根据所输入的学号,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位

28、,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。在现实中会有由于某些原因而不在学校的同学的记录,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 39 页 - - - - - - - - - 16 这时候就要对其记录进行删除操作,这样可以使系统及时更新并得到优化。*按数据结构学号(冒泡)降序排序模块用函数 void sort(struct student *headp)来实现主要功能时是用来对学生的记录来按学号大小进行排序。这样方便对学生有

29、个大致的了解。本排序使用冒泡排序。它有两个优点:一是“编程复杂度”很低,很容易写出代码;二是具有稳定性, 这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。冒泡排序时进过n-1 趟子排序完成的,第i 趟子排序从第1 个数至第n+1 个数,若第i个数比后一个数大(则升序,小则降序。本程序一律采用降序)则交换两数。本程序中冒泡排序代码如下:for(p1=*headp,i=0;inext) for(p2=p1-next,j=i+1;jnext) if(p1-SnumSnum) num=p2-Snum; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - -

30、 - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 39 页 - - - - - - - - - 17 p2-Snum=p1-Snum; p1-Snum=num; strcpy(name,p2-Sname); strcpy(p2-Sname,p1-Sname); strcpy(p1-Sname,name); strcpy(sex,p2-Ssex); strcpy(p2-Ssex,p1-Ssex); strcpy(p1-Ssex,sex); age=p2-Sage; p2-Sage=p1-Sage; p1-Sage=age; strcpy(dept,p2

31、-Sdept); strcpy(p2-Sdept,p1-Sdept); strcpy(p1-Sdept,dept); 排序前:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 39 页 - - - - - - - - - 18 排序后:*将学生及选修信息存入文件并显示模块用函数void filesave(struct student *headp,struct StuCourse SC)及 void fileload(struct student *headp,struc

32、t StuCourse SC)实现主要功能是将之前输入的学生信息及选修科目信息存储入文件并从文件中导出显示。首先本模块中有2个文件指针FILE *fp1,*fp2, 分别指向 Student.txt文件与 StuCourse.txt文件。此时会有提示语请确认是否将数据存储进文件:1. 是 2. 否: ,选择 1,将信息存入。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 39 页 - - - - - - - - - 19 * 以上就是本程序的详细设计及基本思想* 四、所

33、遇到的问题和分析解决1、 存在的不足本学生成绩管理系统由九大模块组成,每个模块相互联系又相互独立。这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。 只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信息, 能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。而且在每个模块也有不足的地方,比如在输入学生资料时,对有些信息项没有严格的规定,可以输入任何的字符。这有待以后努力,更详尽的实现模块的功能。2、 do-while 语句的位置问题在修改学生记录此模块中,若循环语句的位置不对那么这个循环就会自动跳出,或

34、变为乱码, 不能实现原有的功能。所以要想清楚到底是在哪安放,按照逻辑思路找到相应的语句正确添加就行了。3、 细节方面其实在有些细节方面还是要特别注意啊,比如分号的添加,的方向问题,函数的返回值等问题, 虽然容易改掉,但是很容易养成不好的习惯,而且还会浪费时间,所以在一开始写的时候就要很仔细,这样才能保证程序编的精细,同时若出现很多这样的错误的话,在编写程序的时候也会心里烦的,所以在编程的时候要认真仔细。4、 文件的写入与读出刚开始时对文件的操作不是很明白,一直不能很好的操作文件,直到最后快要验收的时候,仍旧出现了严重的问题,就是对已经存在的文件读取问题,通过读取文件并输出学生信息 ,将数据从文

35、件中读取,但是不能够正常的读出,最后把读文件的操作语句进行仔细检查后, 发现语句的顺序有点问题,把 fscanf()语句进行再修改后就能够正常的读取文件了。5、 内存的分配问题对于初学者的话对内存的分配和释放问题是比较抽象的和模糊的问题,在排序是之前就出现了交换数据困难的问题,以及内存分配空间繁琐释放空间不及时的问题,造成空间的浪费,使得程序运行时效率较低,因此最后采用了顺序存储记录的方式,这就能改变前面所出现的问题。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 39

36、 页 - - - - - - - - - 20 6、 较小的问题方面其余的就没什么比较大的问题了,基本上只要细心一点的话就可以正确调试了。五、 系统特色及关键技术其实在本程序的设计过程当中,没有很吸引人的关键技术,因为本人的C 语言或 C+语言都不是学的很好,所以当初设计的时候就只是想把功能都实现就好了,尽可能的把所要求的功能都编进程序,这样就觉得很满足了。所以都是设计的比较简单易懂的语言,这样自己能够更明白一些,所以就没有时间去细细地去设计自己的程序。本程序要说有什么值得说的,那就只有人性化这点了,在设计成学的时候,因为自己怕弄混了,所以添加了很详尽的提示,这样在编程的过程中或调试的时候都能

37、够比较快的运行。还有就是尽可能的应用了do-while 语句和 switch-case 语句,这两个语句在之前不是很常用,所以在这个程序中试炼了一下, 虽然在编写的过程中总是出错,但还是成功的用好了,也是程序有条理一些。我也知道这些东西别人可能比我弄得还要好,但是我在我所学的知识中成功的应用了这些,我觉得就是好事, 就是进步。 唯一的亮点可能就是进入系统是的密码设计了,就这一点小小的设计就花了我好几个小时去调试,因为总能在后面程序的加入及运行时发现一些新的小问题。六、 结论及心得体会一周多的课程设计,终于成功的验收了,虽然有些疲惫, 但还是有很多的收获的,像计算机组成原理的课设一样,我又一次巩

38、固了所学到的知识,之前的学习只是停留在理论基础上,现在自己动手操作试验后,才是真正的理解及体会。C 也学了近一年, 有很多知识都是似懂非懂, 通过平时上机操作,自己也了解了一些,但让我有了更深的理解和更好的认识,则是在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很高兴。在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输进去之后,并编译让其运行,发现通过不了,再来检查出问题,是很费费力的事情, 因此分析和规划代码是很重要的,最重要的是要把逻辑结构写好,这样就不会出现大问题, 写代码就要先找出核心的内容,用多

39、种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道了如何整合资料和处理这些资料的能力,这位以后做毕设的论文打下了基础,名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 39 页 - - - - - - - - - 21 使我感觉比较好的是有一种成功的喜悦,虽然在编译的时候会经常因为一些小的错误而心烦意乱, 但是也不失为一件好事,失败的越多积累的经验越丰富,对人的考验

40、也比较多,那么在最后编译成功时的喜悦就越浓烈,也是自己的能力有了进一步的提高。由于知识和经验的不足, 这个程序编写的不是很尽如人意,但是融合了自己的心血,就觉得是最好的,所以在以后还是需要较多的努力的,还是会在以后的学习过程中不断地提高和改进的。七、附录(源代码)#include #include #include #include static int count=0; static int scnum=0; #define N 10 #define SIZE 1000 struct student long Snum; char Sname20; char Ssex10; int Sage

41、; char Sdept10; struct student *next; ; struct Course int Cno; char Cname20; int Credit; ; struct Course Co7=1, 英语 ,4,2, 数学 ,2,3, 信息系统 ,4,4, 操作系统 ,3,5, 数据结构 ,4,6, 数据处理 ,2,7,c/c+,4; struct StuCourse 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 39 页 - - - - -

42、- - - - 22 long Sno; int SCno; double Grade; ; void menu() printf(n 学 生 成 绩 统 计 与 分 析 系 统 nn); printf(n 菜单nn); printf(n 1. 显示 本学期考核的 7 门 科目信息以供 学 生 选 课n); printf(n 2. 输 入 学 生 基 本 信 息 并 显 示n); printf(n 3. 输 入 学 生 的 选 课 信 息n); printf(n 4. 查 找某 学 生的 信息 及选 修科 目 的信息n); printf(n 5. 修 改 某 学 生 的 信 息n); prin

43、tf(n 6. 增 加 一 个 学 生 的 记 录n); printf(n 7. 删 除 某 个 学 生 的 记 录n); printf(n 8. 按 学 号 降 序 排 序, 依 次 输 出n); printf(n 9. 将 学 生 的 信 息 存 储 入 文 件n); printf(n 0. 退出已录入 %d 名学生的记录nn,count); /-选修课程文件存储- void save() FILE *fp; int i; if(fp=fopen(Course.txt,w)=NULL) printf( 无法打开此文件!n); exit(0); for(i=0;i7;i+) if(fwrit

44、e(&Coi,sizeof(struct Course),1,fp)!=1) printf( 无法打开文件Course.txt!n); fclose(fp); 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 39 页 - - - - - - - - - 23 /-选修课程文件输出- void load() FILE *fp; int i; if(fp=fopen(Course.txt,r)=NULL) printf( 无法打开文件Course.txt!n); exit(

45、0); for(i=0;iSname); while(1) printf( 请输入学生的性别(男/女 1/0):n); scanf(%d,&q); if(q=1) strcpy(p-Ssex,男);break; else if(q=0) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 39 页 - - - - - - - - - 24 strcpy(p-Ssex,女);break; else printf( 输入错误,请重新输入!n); printf( 请输入学生的年龄

46、(请输入阿拉伯数字): n); scanf(%d,&p-Sage); printf( 请输入该学生的所属院系(CS/MA/IS) : n); scanf(%s,p-Sdept); p-Snum=a;count+; p-next=*headp;*headp=p; printf(nn 请输入学生的学号:n); scanf(%ld,&a); p=*headp; printf( 学号姓名性别年龄所属院系 n); while(p!=NULL) printf(%ld%10s%8s%8d%10sn,p-Snum,p-Sname,p-Ssex,p-Sage,p-Sdept); p=p-next; /-选修信息

47、的录入- void xuxiuinput(struct student *headp,struct StuCourse SC) int a,b,c;struct student *p; p=*headp; printf( 请输入选修课程的数目:n); scanf(%d,&a);scnum=scnum+a; for(int i=0;iSnum=NULL) printf( 系统中没有任何学生信息,请先选择存储!n);exit(0); while(b!=p-Snum&p-next!=NULL) p=p-next; if(b=p-Snum) 名师资料总结 - - -精品资料欢迎下载 - - - - -

48、 - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 39 页 - - - - - - - - - 25 SCi.Sno=b;break; else printf( 无法找到!请确认是否已输入该学生的信息。n); printf( 输入选修的科目编号(1-7): n); scanf(%d,&c); while(1) if(c=1&c=7) SCi.SCno=c;break; else printf( 请 重 新 选 择 选 修 科 目 ! n 输 入 你 选 修 的 科 目 的 编 号 ( 1-7 ) :n);scanf(%d,&c);

49、 printf( 输入该选修科目的成绩:n); scanf(%lf,&SCi.Grade); printf( 选修科目信息如下:n); printf(Sno Cno Graden); for(i=0;iSnum=NULL) printf( 系统中没有任何学生信息,请先选择存储!n);break; while(x!=p-Snum&p-next!=NULL) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 39 页 - - - - - - - - - 26 p=p-next

50、; if(x=p-Snum) printf( 学号姓名性别年龄所属院系 n); printf(%ld%10s%8s%8d%10sn,p-Snum,p-Sname,p-Ssex,p-Sage,p-Sdept); else printf( 无法找到!请确认是否已输入该学生的信息。n); break; else if(a=2) printf( 请输入该学生的姓名:n); scanf(%s,c); if(p-Snum=NULL) printf( 系统中没有任何学生信息,请先选择存储!n);menu(); while(strcmp(c,p-Sname)!=0)&p-next!=NULL) p=p-nex

51、t; if(strcmp(c,p-Sname)=0) printf( 学号姓名性别年龄所属院系 n); printf(%ld%10s%8s%8d%10sn,p-Snum,p-Sname,p-Ssex,p-Sage,p-Sdept); else printf( 无法找到!请确认是否已输入该学生的信息。n); break; else printf( 输入方式错误,请重新选择查找方式!n); while(1) printf( 请选择选修科目查找的方式:1.学号查找2.科目编号查找(输入1 或2):n); scanf(%d,&a); if(a=1) 名师资料总结 - - -精品资料欢迎下载 - - -

52、 - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 39 页 - - - - - - - - - 27 printf( 请输入想要查找的学生选课信息者的学号:n); scanf(%ld,&b); printf( 选修科目信息如下:n); printf(Sno Cno Graden); for(i=0;iscnum;i+) if(b=SCi.Sno) printf(%-10ld%7d%14.2lfn,SCi.Sno,SCi.SCno,SCi.Grade); break; else if(a=2) printf( 请输入想要查找

53、的学生选课信息的科目编号:n); scanf(%d,&d); printf( 选修科目信息如下:n); printf(Sno Cno Graden); for(i=0;iSnum&p-next!=NULL) p=p-next; if(x=p-Snum) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 39 页 - - - - - - - - - 28 printf( 请输入你想修改的学生信息的标号:1.学号2.姓名3.性别4.年龄5.所属院系6.选修科目信息:n); s

54、canf(%d,&y); while(1) if(y=1) printf( 请输入该生的新学号:n); scanf(%ld,&b); for(i=0;iSnum) SCi.Sno=b; p-Snum=b; break; if(y=2) printf( 请输入该学生的新姓名:n); scanf(%s,p-Sname);break; if(y=3) printf( 请重选该学生的性别:n); while(1) printf( 请输入学生的性别(男/女 1/0):n); scanf(%d,&q); if(q=1) strcpy(p-Ssex,男);break; else if(q=0) strcpy

55、(p-Ssex,女);break; else printf( 输入错误,请重新输入!n); break; if(y=4) printf( 请输入该生的年龄(请输入阿拉伯数字):n); scanf(%d,&p-Sage);break; if(y=5) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 39 页 - - - - - - - - - 29 printf( 请输入该学生的所属院系(CS/MA/IS) :n); scanf(%d,p-Sdept);break; if

56、(y=6) printf( 请输入想要修改的选修科目信息:1.选修者的学号2.选修科目编号n); scanf(%d,&j); while(1) if(j=1) printf( 请输入想要修改的学号:n); scanf(%ld,&a); for(i=0;iSnum&k-next!=NULL) k=k-next; if(a=k-Snum) k-Snum=n; break; else if(j=2) printf( 输入想要修改科目的编号:n);load(); scanf(%d,&m); for(i=0;iSnum,p-Sname,p-Ssex,p-Sage,p-Sdept); printf( 选修

57、科目信息如下:n); printf(Sno Cno Graden); for(i=0;iSnum=n) printf( 该学生记录已经存在,请重新输入!n); printf( 输入一个新的学生的记录(先输入学号 ):n); scanf(%ld,&n); current=*headp; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 30 页,共 39 页 - - - - - - - - - 31 else current=current-next; p-Snum=n;count+;

58、printf( 请输入学号为%ld 的选修信息:nn,p-Snum); printf( 请输入该生选修课程的数目:n); scanf(%d,&a);m=scnum; for(j=m;jSnum=NULL) printf( 系统中没有任何学生信息,请先选择存储!n);exit(0); while(b!=p-Snum&p-next!=NULL) p=p-next; if(b=p-Snum) SCj.Sno=b;break; else printf( 无法找到!请确认是否已输入该学生的信息。n); printf( 输入选修的科目编号(1-7): n); scanf(%d,&c); while(1)

59、if(c=1&cSname); while(i) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 31 页,共 39 页 - - - - - - - - - 32 printf( 请输入学生的性别(男/女 1/0) :n); scanf(%d,&q); if(q=1) strcpy(p-Ssex,男);i=0; else if(q=0) strcpy(p-Ssex,女);i=0; else printf( 输入错误,请重新输入!n); printf( 请输入学生的年龄(请输入阿拉伯数

60、字):n); scanf(%d,&p-Sage); printf( 请输入该学生的所属院系(CS/MA/IS) :n); scanf(%s,p-Sdept); current=*headp; while(p-Snumcurrent-Snum¤t-next!=NULL) last=current; current=current-next; if(p-SnumSnum) if(current=*headp) p-next=*headp; *headp=p; else p-next=current; last-next=p; else p-next=NULL; current-next

61、=p; p=*headp; printf( 学号姓名性别年龄所属院系 n); while(p!=NULL) printf(%ld%10s%8s%8d%10sn,p-Snum,p-Sname,p-Ssex,p-Sage,p-Sdept); p=p-next; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 32 页,共 39 页 - - - - - - - - - 33 printf( 选修科目信息如下:n); printf(Sno Cno Graden); for(i=0;iSnum

62、!=no&p-next!=NULL) last=p; p=p-next; if(p-Snum=no) if(p=*headp) *headp=p-next; else for(i=0;iSnum=SCi.Sno) SCi.Sno=0; j+; last-next=p-next; free(p); printf( 删除成功! n);count-; else printf( 系统内无该学生的信息!n); p=*headp; for(i=0;iscnum;i+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - -

63、 - - - - 第 33 页,共 39 页 - - - - - - - - - 34 for(k=0;kscnum-i;k+) if(SCi.SnoSnum,p-Sname,p-Ssex,p-Sage,p-Sdept); p=p-next; printf( 选修科目信息如下:n); printf(Sno Cno Graden); for(i=0;iscnum;i+) printf(%-10ld%7d%14.2lfn,SCi.Sno,SCi.SCno,SCi.Grade); /-将学生的信息进行排序- void sort(struct student *headp) int i,j; stru

64、ct student *p1,*p2,*p; long num;int age; char name20,sex20,dept10; printf( 排序如下 :n); for(p1=*headp,i=0;inext) for(p2=p1-next,j=i+1;jnext) if(p1-SnumSnum) num=p2-Snum; p2-Snum=p1-Snum; p1-Snum=num; strcpy(name,p2-Sname); strcpy(p2-Sname,p1-Sname); strcpy(p1-Sname,name); strcpy(sex,p2-Ssex); 名师资料总结 -

65、- -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 34 页,共 39 页 - - - - - - - - - 35 strcpy(p2-Ssex,p1-Ssex); strcpy(p1-Ssex,sex); age=p2-Sage; p2-Sage=p1-Sage; p1-Sage=age; strcpy(dept,p2-Sdept); strcpy(p2-Sdept,p1-Sdept); strcpy(p1-Sdept,dept); p=*headp; printf( 学号姓名性别年龄所属院系 n);

66、 while(p!=NULL) printf(%ld%10s%8s%8d%10sn,p-Snum,p-Sname,p-Ssex,p-Sage,p-Sdept); p=p-next; /-将信息存储进文件- void filesave(struct student *headp,struct StuCourse SC) FILE *fp1,*fp2;int a,j; struct student *p; p=*headp; if(fp1=fopen(Student.txt,w)=NULL) printf( 无法打开文件Student.txt!n); exit(0); if(fp2=fopen(S

67、C.txt,w)=NULL) printf( 无法打开文件SC.txt!n); exit(0); printf( 请确认是否将数据存储进文件:1.是 2.否: n); scanf(%d,&a); while(1) if(a=1) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 35 页,共 39 页 - - - - - - - - - 36 for(int i=0;icount;i+) fwrite(&pi,sizeof(struct student),1,fp1); for(j=0

68、;jscnum;j+) fwrite(&SCj,sizeof(struct StuCourse),1,fp2); fclose(fp1);fclose(fp2); printf( 数据已经存储进文件!n);break; else if(a=2) printf( 未将数据存储入文件!数据会丢失!n);break; else printf( 输入错误!请重新输入!n); /-将信息输出文件- void fileload(struct student *headp,struct StuCourse SC) FILE *fp1,*fp2; struct student *p; p=*headp;int

69、 j; if(fp1=fopen(Student.txt,r)=NULL) printf( 无法打开文件Student.txt!n); exit(0); if(fp2=fopen(SC.txt,r)=NULL) printf( 无法打开文件SC.txt!n); exit(0); printf(nStudent.txt如下: n); printf( 学号姓名性别年龄所属院系 n); for(int i=0;icount;i+) fread(&pi,sizeof(struct student),1,fp1); printf(%ld%10s%8s%8d%10s,pi.Snum,pi.Sname,pi

70、.Ssex,pi.Sage,pi.Sdept); printf(nSC.txt如下: n); printf(Sno Cno Graden); for(j=0;jscnum;j+) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 36 页,共 39 页 - - - - - - - - - 37 fread(&SCj,sizeof(struct StuCourse),1,fp2); printf(%-10ld%7d%14.2lfn,SCj.Sno,SCj.SCno,SCj.Grade);

71、 fclose(fp1);fclose(fp2); int main() char codeN=123456,userN,ch; struct student *head;struct StuCourse SCSIZE; head=NULL; int t=0,i=0; char choose; int flag=1; while(1) printf( 请输入密码(输入6 位数密码方可使用) :ninput password:n); while(ch=getch()!=r) useri+=ch; putchar(*); useri=0; t+; if(strcmp(code,user)=0) p

72、rintf(n*欢迎使用本系统!*n); while(flag) menu(); printf( 请选择: n); scanf(%c,&choose); switch(choose) case1: save(); printf( Cno Cname Ccreditn); load(); getchar();getchar();break; case2: printf( 请分别输入学生的学号,姓名,性别,年龄以及所属院系nn); input(&head); getchar();getchar();break; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -

73、- - - - - - - 名师精心整理 - - - - - - - 第 37 页,共 39 页 - - - - - - - - - 38 case3: xuxiuinput(&head,SC); getchar();getchar();break; case4: find(&head,SC); getchar();getchar();break; case5: modify(&head,SC); getchar();getchar();break; case6: insert(&head,SC); getchar();getchar();break; case7: shanchu(&head

74、,SC); getchar();getchar();break; case8: sort(&head); getchar();getchar();break; case9: filesave(&head,SC);fileload(&head,SC); getchar();getchar();break; case0:flag=0; printf(n *The End!* n); break; default: printf(n 选择错误,重选!n); break; else if(t3) printf(n 密码错误 ,请重新输入 !n); else printf(n 对不起 ,你无权使用本系统

75、! 退出系统 !n 请在 30 秒后再进行操作!n); break; return 0; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 38 页,共 39 页 - - - - - - - - - 39 参考文献:1 谭浩强 . C 程序设计 (第四版 ). 北京:清华大学出版社, 2005 2 C+程序设计钱能清华大学出版社3 网上相关资料名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 39 页,共 39 页 - - - - - - - - -

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号