数据结构课程设计(C语言)
更新时间:2024-03-27 02:07:01 阅读量: 综合文库 文档下载
计算机科学与技术学院课程设计成绩单
课程名称:数据结构课程设计 姓名 xxx 性别 x 学号 xxx 综合成绩 程序运行情况 (占总成绩20%) 成绩等级 班级 xxx班 □能正确运行 □基本能正确运行 □能运行但结果不完善 (20分) (15分) (10分) 程序功能的完善程 度 □完善 □基本完善 □不完善 (占总成绩10%) (10分) (8分) (5分) 程序结构的合理性 (占总成绩10%) □合理 □基本合理 □不太合理 (10分) (8分) (5分) 对问题的答辩情况 (占总成绩40%) □概念正确有创新 □能正确回答所有问题 □基本能正确回答 (40分) (35分) (30分) □部分问题回答概念不清晰 (20分) 学生的工作态度与□工作态度认真能独立完成任务 □工作态度认真但独立性较差 独立工作能力 (10分) (8分) (占总成绩10%) □工作态度基本认真但缺乏独立性 (5分) 设计报告的规范性 (占总成绩10%) □符合规范 □基本符合规范 □规范性较差 (10分) (8分) (5分) 优秀:90分~100分 良好:80分~89分 中等:70~79分 及格:60~69分 不及格0分~59分
武汉科技大学计算机科学与技术学院制表
1
目录
引言------------------------------------------------------------3
一、问题描述------------------------------------------------
二、需求分析------------------------------------------------
三、详细设计------------------------------------------------
四、所遇到的问题和分析解决---------------------------
五、系统特色及关键技术---------------------------------
六、结论及心得体会---------------------------------------
七、附录(源代码)---------------------------------------
2
引言
通过本课程设计,使自己更加系统地理解和掌握数据结构的基本概念;能自如地根据实际要求,设计相应的数据结构,并运用C或C++语言实现所设计的算法,编写较大型的程序,分析和解决实际应用问题,进一步加深、巩固所学专业课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握C语言或C++语言独立的编写、调试应用程序和进行其它相关设计的技能。
此项目主要是考察我们对结构体、数组、文件等具体操作,以及对C语言语法的掌握,所以做成此项目要求比较高的设计要求,对整体有很熟悉的概括,同时调试过程也是很重要的,对程序界面的要求也比较高,要设计的合理同时也要美观一点,能够人性化的描述清楚你的各个功能,一目了然,对其他用户使用本程序简单易懂,这才能成本程序或本系统是成功的。
对于学生成绩管理系统,此项目每年都有学生去做,但是能够在其他项目中脱颖而出,还要有自己的设计特色,用简单的语言详细描述系统的功能,这才是关键。
这个设计能够练习我们的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,学会调试一个比较长的程序的基本方法,同时掌握书写程序设计开发文档的能力。
3
一﹑问题描述
1、课程设计应完成的工作 (1)编写算法
(2)算法测试,并有具体的测试结果和结果分析 (3)撰写课程报告,内容包括:
①封面 ②目录
③课程设计报告正文 ④使用说明
⑤参考文献
2、总体设计工作(包含几大功能模块)
1. 显 示 本 学 期 考 核 的 7 门 科 目 信 息 以 供 学 生 选 课; 2. 输 入 学 生 基 本 信 息 并 显 示; 3. 输 入 学 生 的 选 课 信 息;
4. 查 找 某 学 生 的 信 息 及 选 修 科 目 的 信 息;
5. 修 改 某 学 生 的 信 息; 6. 增 加 一 个 学 生 的 记 录; 7. 删 除 某 个 学 生 的 记 录; 8. 按 学 号 降 序 排 序, 依 次 输 出;
9. 将 学 生 的 信 息 存 储 入 文 件。
二、 需求分析
1、系统描述
该系统实现对若干个大学生的学习成绩进行管理。至少包括以下信息:
结构体:学生,选修科目,选修信息 学生:学号,姓名,性别,年龄,所属院系 选修科目:科目编号,科目名称,科目学分 选修信息:选修该科目者学号,科目编号,科目成绩
4
2、功能要求
1.使用中文菜单,界面设计和用户输入输出要人性化些;
2. 将学生信息保存在文本文档中,具体对学生信息进行插入删除查询操作时,将保存在文本文档中的学生信息提取出来,保存在自己定义的数据结构中,然后再对该数据结构进行操作,所有操作完成,或者在相应的命令后,再将学生信息保存到文本文档中;
3.具有数据输入功能,输入的数据能最终保存在文件中; 4.具有数据删除功能,能最终从文件中删除;
5.排序功能,根据自己设计的数据结构,设计排序算法;
6.具有多种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;7. 学生信息的修改(比如修改学生姓名,修改学生某门课程的成绩)。
考查点:
? 插入时注意学号的处理,可以不填吗,是否重复,其他数据是否可以乱填,如何控制; ? 删除时一要防止误操作,二要考虑该生的选课信息,如何处理; ? 修改时同样要考虑各数据项的性质; ? 对选修表进行插入、删除、修改操作; ? 查询要求可以实现多条件查询。 有3个文件:
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
6 数据处理 7 C/C++
SC.txt中的内容: Sno Cno 20120001 1 20120001 2 20120001 4 20120002 1 20120003 3 20120003 5 20120005 7
3、开发环境
2 4
Grade 90 80 85 86 82 88 90
Visual C++不仅仅是是一个C++编译器,而是一个基于Windows操作系统的可视化集成开发环境IDE,这种环境开发出来的软件稳定性好、可移植性强,可以编制各种各样的Windows应用程序。
三、详细设计
1、系统流程图 开始 显示 信息 科 目 主界面 输入学生信息 输入选修信息 查找学生信息 修改学生信息 增加学生信息 删除学生信息 信息存入文件 退出本系统
结束
6
2、界面设计
主界面:在此界面用户可以选择要操作的选项,回车之后即可进入相关的页面进行操作(例如:选择1 ,即可显示本学期考核的7门科目信息)
在本界面里用户可以输入学生相关的信息数据,按照提示进行操作即可,例如
7
所有操作均有提示语,比较人性化的管理,易懂,简单。
3、大概设计模块
(1)先编入系统所需的库函数,从而使程序可运行。
#include
#include
(2)Main()函数的设计
在main()函数中主要运用do-while循环语句和switch()-case选择判断语句来调用相关
功能模块。系统的运行是在一个永真的循环里进行的,只有在主界面并选择“退出”时,才会跳出永真循环,并退出程序。
(3)主界面的设计
在主界面中包括“①显示本学期考核的7门科目信息以供学生选科目②输入学生基本
信息并显示 ③输入学生的选课信息 ④查找某学生的信息及选修科目的信息 ⑤修改某学生的信息⑥增加一个学生的记录 ⑦删除某学生的记录 ⑧按数据结构降序(冒泡)排序 ⑨将学 生的信息存储入文件⑩退出”等全部的功能,之所以设计这麽一个主界面,一是因为能使用
8
户对程序操作的流程更加清晰简明,二是保证了用户同时只能对一个文件进行操作系统的要求,保证了系统不会打开文件紊乱或者出现致命的错误。每个函数体如下: 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 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 **headp,struct StuCourse SC[]);//文件信息输出
4、详细设计思想
(1)确定语言算法
由于之前都没有做过类似的设计,所以一时间不能够确定到底使用何种语言来设计
本系统,所以在网上看了一些其他人设计的程序,链表的、数组的,C++的,各种各样的,也不知如何选择,但是仔细地看了其中的设计思想,最终还是用C和链表的来做,一是觉得本人对指针数组掌握的不是很熟练,那么在设计过程中容易产生不能理解的错误,耽误时间,二是想运用C,可以巩固一下所学的数据结构的知识,之前做实验的时候一直用C++来做,都没怎么用所学的知识,这时候想练练。就这样确定了整体的结构算法。
(2)确定程序主要功能模块
这个就比较简单了,主要是根据系统设计的说明及要求来设计,从而设计了十大功
能模块,有文件操作,有系统维护功能,排序和统计功能,有输入输出等基本功能,比较人性化,添加了较多的提示语。这个程序的主要功能时输入学生的学号,姓名,学期和三科成绩来对其进行存储,在存储后可以对学生的成绩按学号及学期或姓名及学期来进行查询,同时输出此同学的平均分及总分,之后可以对某个同学的成绩进行各种操作,例如修改,删除等,同时还可以对学生们的成绩按照总分或单科成绩排序,在整个过程中所做的操作都会保存到\文件中并显示。
(3)系统结构体的设计
9
学生 姓性 学 号 名 别 struct student //结构体 {
long Snum;//学号
char Sname[20];//姓名 char Ssex[10];//性别 int Sage;//年龄
char Sdept[10];//所属院系
struct student *next;//指针
};
科目
编名学 号 称 分
struct Course//结构体 {
int Cno;//选修科目编号
char Cname[20];//信息科目名称 int Credit;//信息科目学分 };
选修
年所龄 属院系
10
学 号
struct StuCourse//结构体 { long Sno;//选修者学号 int SCno;//选修科目编号 double Grade;//选修科目成绩 };
编号 成绩 (4)各功能模块的设计 ******主函数模块
用函数int main()来实现
主要是来显示主菜单,使用户选择操作。首先定义一个指针数组(全局使用)StuCourse SC[SIZE](SIZE=1000),;在此处SIZE是指数组大小,之前有定义的,在这里应用了do-while和switch-case语句来进行选择,是个比较简单实现的模块。最后若选择“0”则是退出永真循环。
******选修课程的文件输入(出)模块
用函数void save();与void load();来实现
主要用来将已定义的结构体数组Course存储入文件Course.txt,以及将其中数据从文件Course.txt中输入。
void save()//录入文件 {
FILE *fp; int i;
if((fp=fopen(\ {
printf(\无法打开此文件!\\n\ exit(0); }
for(i=0;i<7;i++) {
if(fwrite(&Co[i],sizeof(struct Course),1,fp)!=1)
printf(\无法打开文件Course.txt!\\n\ }
11
fclose(fp); }
void load()//导出文件 {
FILE *fp; int i;
if((fp=fopen(\ {
printf(\无法打开文件Course.txt!\\n\ exit(0); }
for(i=0;i<7;i++) {
fread(&Co[i],sizeof(struct Course),1,fp);
printf(\ }
fclose(fp); }
******输入学生记录模块
用函数void input(struct student **headp);来实现
主要功能用来对学生的信息进行收集和输入。首先会跳出主菜单,选择”2”,进入输入模块输入所需学生个数的学生信息,比如学号,姓名,性别,年龄及所属院系(以学号为0 结束输入新的学生信息)等。输完之后会自动跳出主菜单,根据主菜单来在此基础上进行操作。期间会有一些提示语,按此操作即可。根据if和for语句来判定期间是否有重复学号输入,在本操作中,允许有重复学生姓名出现。在此模块中,同时也用到了一个控制变量a,它是用来判定的条件变量。之后返回主菜单。
******输入选修信息模块
用函数void xuxiuinput(struct student **headp,struct StuCourse SC[])来实现 主要功能用于选修信息的录入。首先会跳出主菜单,选择“3“,进入输入模块输入所需选修科目的个数,接着输入选修该科目者的学号及科目编号及成绩。根据for-while语句来控制,期间会有提示语。在本操作中,不允许学号的重复,科目编号控制在1-7。
12
******查找学生及选修信息模块
用函数void find(struct student **headp,struct StuCourse SC[])实现 主要功能用于学生基本信息的查找以及选修信息的查找。首先会跳出主菜单,选择”4’,接着选择查找的方式(1.学号查找 2.姓名查找),输入学号(姓名),便会显示拥有该学号(姓名)学生的基本信息;对于选修信息也是同样。该模块运用了for-while语句,对于学号,科目编号等进行控制,避免重复等情况出现。
13
******修改学生及选修信息模块
用函数int modify(struct student **headp,struct StuCourse SC[])实现
主要功能是修改学生的基本信息以及选修科目的信息。首先跳出主菜单,选择‘5’。输入你想要修改的学生的学号,接着会弹出一个提示语\请输入你想修改的学生信息的标号:1.学号 2.姓名 3.性别 4.年龄 5.所属院系 6.选修科目信息: \,选择想要修改的选项,例如‘1’,接着输入新的学号,修改成功。在本模块中运用了if-else语句及while语句来控制变量,只有正确输入才会弹出循环,正确显示。
******插入学生记录及选修信息模块
用函数void insert(struct student **headp,struct StuCourse SC[])实现 主要功能是插入一个新的学生记录,并将该学生的选修信息录入到StuCourse中。 首先弹出主菜单,选择‘6’,输入新增加的学生的学号,接着输入该学生的选修信息,然后再输入学生的姓名,年龄等信息。在本模块中同样使用while语句以及if-else语句来控制学号等的输入 。
14
******删除学生记录以及选修信息模块
用函数void shanchu(struct student **headp,struct StuCourse SC[])来实现 主要功能是删除一个学生的记录并删除其中StuCourse中的记录。首先有个选择的操作,之后会有判断语句,根据所输入的学号,来显示删除前的信息记录,添加for循环语句,循环把后一位的信息提前一位,整体数量减一,来进行全局变量的修改,之后再把修改过后的信息记录保存到文件中去。在现实中会有由于某些原因而不在学校的同学的记录,
15
这时候就要对其记录进行删除操作,这样可以使系统及时更新并得到优化。
******按数据结构学号(冒泡)降序排序模块
用函数void sort(struct student **headp)来实现
主要功能时是用来对学生的记录来按学号大小进行排序。这样方便对学生有个大致的了解。
本排序使用冒泡排序。它有两个优点:一是“编程复杂度”很低,很容易写出代码;二是具有稳定性,这里的稳定性是指原序列中相同两元素的相对顺序仍然保持到排序后的序列。冒泡排序时进过n-1趟子排序完成的,第i趟子排序从第1个数至第n+1个数,若第i个数比后一个数大(则升序,小则降序。本程序一律采用降序)则交换两数。本程序中冒泡排序代码如下:
for(p1=*headp,i=0;i
for(p2=p1->next,j=i+1;j
if(p1->Snum
num=p2->Snum;
16
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->Sdept); strcpy(p2->Sdept,p1->Sdept); strcpy(p1->Sdept,dept);
排序前:
17
排序后:
******将学生及选修信息存入文件并显示模块
用函数void filesave(struct student **headp,struct StuCourse SC[])及void fileload(struct student **headp,struct StuCourse SC[])实现
主要功能是将之前输入的学生信息及选修科目信息存储入文件并从文件中导出显示。首先本模块中有2个文件指针FILE *fp1,*fp2,分别指向Student.txt文件与StuCourse.txt文件。此时会有提示语\请确认是否将数据存储进文件:1.是 2.否:\,选择‘1’,将信息存入。
18
*****以上就是本程序的详细设计及基本思想*****
四、所遇到的问题和分析解决
1、 存在的不足
本学生成绩管理系统由九大模块组成,每个模块相互联系又相互独立。这个学生成绩管理系统存在着很多不足之处,由于自己本身编程能力的问题,这个系统可以实现的功能非常有限。只能实现学生管理系统最基本的功能,可以进行简单的输入、输出学生资料,查询和修改学生信息,能直接从文件中读入数据,能对系统所作的修改、操作进行保存等。而且在每个模块也有不足的地方,比如在输入学生资料时,对有些信息项没有严格的规定,可以输入任何的字符。这有待以后努力,更详尽的实现模块的功能。 2、 do-while语句的位置问题
在修改学生记录此模块中,若循环语句的位置不对那么这个循环就会自动跳出,或变为乱码,不能实现原有的功能。所以要想清楚到底是在哪安放,按照逻辑思路找到相应的语句正确添加就行了。 3、 细节方面
其实在有些细节方面还是要特别注意啊,比如分号的添加,<<与>>的方向问题,函数的返回值等问题,虽然容易改掉,但是很容易养成不好的习惯,而且还会浪费时间,所以在一开始写的时候就要很仔细,这样才能保证程序编的精细,同时若出现很多这样的错误的话,在编写程序的时候也会心里烦的,所以在编程的时候要认真仔细。 4、 文件的写入与读出
刚开始时对文件的操作不是很明白,一直不能很好的操作文件,直到最后快要验收的时候,仍旧出现了严重的问题,就是对已经存在的文件读取问题,通过\读取文件并输出学生信息\,将数据从文件中读取,但是不能够正常的读出,最后把读文件的操作语句进行仔细检查后,发现语句的顺序有点问题,把fscanf()语句进行再修改后就能够正常的读取文件了。 5、 内存的分配问题
对于初学者的话对内存的分配和释放问题是比较抽象的和模糊的问题,在排序是之前就出现了交换数据困难的问题,以及内存分配空间繁琐释放空间不及时的问题,造成空间的浪费,使得程序运行时效率较低,因此最后采用了顺序存储记录的方式,这就能改变前面所出现的问题。
19
6、 较小的问题方面
其余的就没什么比较大的问题了,基本上只要细心一点的话就可以正确调试了。
五、系统特色及关键技术
其实在本程序的设计过程当中,没有很吸引人的关键技术,因为本人的C语言或C++语言都不是学的很好,所以当初设计的时候就只是想把功能都实现就好了,尽可能的把所要求的功能都编进程序,这样就觉得很满足了。所以都是设计的比较简单易懂的语言,这样自己能够更明白一些,所以就没有时间去细细地去设计自己的程序。本程序要说有什么值得说的,那就只有人性化这点了,在设计成学的时候,因为自己怕弄混了,所以添加了很详尽的提示,这样在编程的过程中或调试的时候都能够比较快的运行。还有就是尽可能的应用了do-while语句和switch-case语句,这两个语句在之前不是很常用,所以在这个程序中试炼了一下,虽然在编写的过程中总是出错,但还是成功的用好了,也是程序有条理一些。我也知道这些东西别人可能比我弄得还要好,但是我在我所学的知识中成功的应用了这些,我觉得就是好事,就是进步。唯一的亮点可能就是进入系统是的密码设计了,就这一点小小的设计就花了我好几个小时去调试,因为总能在后面程序的加入及运行时发现一些新的小问题。
六、结论及心得体会
一周多的课程设计,终于成功的验收了,虽然有些疲惫,但还是有很多的收获的,像计算机组成原理的课设一样,我又一次巩固了所学到的知识,之前的学习只是停留在理论基础上,现在自己动手操作试验后,才是真正的理解及体会。C也学了近一年,有很多知识都是似懂非懂,通过平时上机操作,自己也了解了一些,但让我有了更深的理解和更好的认识,则是在这次的课设上,之前的困惑也通过这次的课设解决了一些,虽然还是不能够全面的理解,但是有进步就很高兴。
在课程设计之前,因为有了综合实验的经验与教训,明白了写代码这一步是非常重要的,因为当你把代码输进去之后,并编译让其运行,发现通过不了,再来检查出问题,是很费费力的事情,因此分析和规划代码是很重要的,最重要的是要把逻辑结构写好,这样就不会出现大问题,写代码就要先找出核心的内容,用多种方法来实现核心部分,这样可以尽可能的避免发现逻辑或编译不支持的错误。
通过本次论文设计,我初步学会了论文设计的基本方法,学会了怎样去借鉴别人的方法和经验,知道了如何整合资料和处理这些资料的能力,这位以后做毕设的论文打下了基础,
20
使我感觉比较好的是有一种成功的喜悦,虽然在编译的时候会经常因为一些小的错误而心烦意乱,但是也不失为一件好事,失败的越多积累的经验越丰富,对人的考验也比较多,那么在最后编译成功时的喜悦就越浓烈,也是自己的能力有了进一步的提高。由于知识和经验的不足,这个程序编写的不是很尽如人意,但是融合了自己的心血,就觉得是最好的,所以在以后还是需要较多的努力的,还是会在以后的学习过程中不断地提高和改进的。
七、附录(源代码)
#include
static int count=0; static int scnum=0; #define N 10
#define SIZE 1000
struct student { long Snum;
char Sname[20]; char Ssex[10]; int Sage; char Sdept[10]; struct student *next; };
struct Course { int Cno; char Cname[20]; int Credit; };
struct Course Co[7]={{1,\英语\数学\信息系统\操作系统\数据结构\数据处理\
struct StuCourse {
21
long Sno; int SCno; double Grade; };
void menu() { printf(\ 学 生 成 绩 统 计 与 分 析 系 统 \\n\\n\ printf(\ 菜 单\\n\\n\ printf(\ 1. 显 示 本 学 期 考 核 的 7 门 科 目 信 息 以 供 学 生 选 课\\n\ printf(\ 2. 输 入 学 生 基 本 信 息 并 显 示\\n\ printf(\ 3. 输 入 学 生 的 选 课 信 息\\n\ printf(\ 4. 查 找 某 学 生 的 信 息 及 选 修 科 目 的 信 息\\n\
printf(\ 5. 修 改 某 学 生 的 信 息\\n\ printf(\ 6. 增 加 一 个 学 生 的 记 录\\n\ printf(\ 7. 删 除 某 个 学 生 的 记 录\\n\ printf(\ 8. 按 学 号 降 序 排 序, 依 次 输 出\\n\ printf(\ 9. 将 学 生 的 信 息 存 储 入 文 件\\n\ printf(\ 0. 退 出 已录入%d名学生的记录\\n\\n\}
//-------------------------------选修课程文件存储----------------------- void save() { FILE *fp; int i; if((fp=fopen(\ { printf(\无法打开此文件!\\n\ exit(0); } for(i=0;i<7;i++) { if(fwrite(&Co[i],sizeof(struct Course),1,fp)!=1) printf(\无法打开文件Course.txt!\\n\ } fclose(fp); }
22
//--------------------选修课程文件输出--------------------------- void load() { FILE *fp; int i; if((fp=fopen(\ { printf(\无法打开文件Course.txt!\\n\ exit(0); } for(i=0;i<7;i++) { fread(&Co[i],sizeof(struct Course),1,fp); printf(\ } fclose(fp); }
//-----------------------------学生信息输入-------------------------- void input(struct student **headp) {
struct student *p; long a;int q; printf(\若要停止输入学生数据,请将学号以*****************\\n\\n\ printf(\请输入学生的学号:\\n\ scanf(\ while(a!=0) { p=(struct student*)malloc(sizeof(struct student)); if(p==NULL) { printf(\ exit(0); } printf(\请输入学生的姓名:\\n\ scanf(\ while(1) { printf(\请输入学生的性别(男/女 1/0):\\n\ scanf(\ if(q==1) {strcpy(p->Ssex,\男\ else if(q==0)
0输入23
{strcpy(p->Ssex,\女\ else printf(\输入错误,请重新输入!\\n\ } printf(\请输入学生的年龄(请输入阿拉伯数字):\\n\ scanf(\ printf(\请输入该学生的所属院系(CS/MA/IS):\\n\ scanf(\ p->Snum=a;count++; p->next=*headp;*headp=p; printf(\请输入学生的学号:\\n\ scanf(\ } p=*headp; printf(\学号 姓名 性别 年龄 所属院系\\n\ while(p!=NULL) { printf(\ p=p->next; } }
//--------------------选修信息的录入-------------------------
void xuxiuinput(struct student **headp,struct StuCourse SC[]) { int a,b,c;struct student *p; p=*headp; printf(\请输入选修课程的数目:\\n\ scanf(\ for(int i=0;iSnum==NULL) {printf(\系统中没有任何学生信息,请先选择存储!\\n\ while(b!=p->Snum&&p->next!=NULL) {
p=p->next; } if(b==p->Snum)
24
{ SC[i].Sno=b;break; } else {printf(\无法找到!请确认是否已输入该学生的信息。\\n\ } printf(\输入选修的科目编号(1-7):\\n\ scanf(\ while(1) { if(c>=1&&c<=7) {SC[i].SCno=c;break;} else {printf(\请重新选择选修科目!\\n输入你选修的科目的编号(1-7):\\n\ } printf(\输入该选修科目的成绩:\\n\ scanf(\ } printf(\选修科目信息如下:\\n\ printf(\ Cno Grade\\n\ for(i=0;i printf(\ } } //——————————查找学生的基本信息以及选修信息————————- void find(struct student **headp,struct StuCourse SC[]) { struct student *p;long b; long x;int a,i,d;char c[20]; p=*headp;printf(\请选择查找的方式:1.学号查找 2.姓名查找 (输入1或2):\\n\ scanf(\ while(1) { if(a==1) { printf(\请输入该学生的学号:\\n\ scanf(\ if(p->Snum==NULL) {printf(\系统中没有任何学生信息,请先选择存储!\\n\ while(x!=p->Snum&&p->next!=NULL) 25 { p=p->next; } if(x==p->Snum) { printf(\学号 姓名 性别 年龄 所属院系\\n\ printf(\ } else printf(\无法找到!请确认是否已输入该学生的信息。\\n\ break; } else if(a==2) { printf(\请输入该学生的姓名:\\n\ scanf(\ if(p->Snum==NULL) {printf(\系统中没有任何学生信息,请先选择存储!\\n\ while((strcmp(c,p->Sname)!=0)&&p->next!=NULL) { p=p->next; } if(strcmp(c,p->Sname)==0) { printf(\学号 姓名 性别 年龄 所属院系\\n\ printf(\ } else printf(\无法找到!请确认是否已输入该学生的信息。\\n\ break; } else printf(\输入方式错误,请重新选择查找方式!\\n\ } while(1) { printf(\请选择选修科目查找的方式:1.学号查找 2.科目编号查找 (输入1或2):\\n\ scanf(\ if(a==1) { 26 printf(\请输入想要查找的学生选课信息者的学号:\\n\ scanf(\ printf(\选修科目信息如下:\\n\ printf(\ Cno Grade\\n\ for(i=0;i printf(\请输入想要查找的学生选课信息的科目编号:\\n\ scanf(\ printf(\选修科目信息如下:\\n\ printf(\ Cno Grade\\n\ for(i=0;i //-----------------------------修改学生的信息以及选修科目的信息--------------------------------- int modify(struct student **headp,struct StuCourse SC[]) { struct student *p,*k;int q,i,j,m,n; long x,a,b;p=*headp;k=*headp;int y; printf(\请输入要修改的学生的学号:\\n\ scanf(\ while(x!=p->Snum&&p->next!=NULL) { p=p->next; } if(x==p->Snum) { 27 printf(\请输入你想修改的学生信息的标号:1.学号 2.姓名 3.性别 4.年龄 5.所属院系 6.选修科目信息:\\n\ scanf(\ while(1) { if(y==1) { printf(\请输入该生的新学号:\\n\ scanf(\ for(i=0;i 28 { printf(\请输入该学生的所属院系(CS/MA/IS):\\n\ scanf(\ } if(y==6) { printf(\请输入想要修改的选修科目信息:1.选修者的学号 2.选修科目编号 scanf(\ while(1) { if(j==1) { printf(\请输入想要修改的学号:\\n\ scanf(\ for(i=0;i while(a!=k->Snum&&k->next!=NULL) { k=k->next; } if(a==k->Snum) k->Snum=n; break; } else if(j==2) { printf(\输入想要修改科目的编号:\\n\ scanf(\ for(i=0;i 29 \\n\ scanf(\ } break; } else printf(\输入错误!请重新输入!\\n\ } break; } else printf(\ 选择错误,重选! \\n\} printf(\学号 姓名 性别 年龄 所属院系\\n\ printf(\ printf(\选修科目信息如下:\\n\ printf(\ Cno Grade\\n\ for(i=0;i //------------------------------插入一个学生的信息并修改选修科目的信息----------------------- void insert(struct student **headp,struct StuCourse SC[]) { long n;int q,a,j,b,c,m,i=1; struct student *p,*last,*current; p=(struct student *)malloc(sizeof(struct student)); current=*headp; printf(\输入一个新的学生的记录(先输入学号):\\n\ scanf(\ while(current!=NULL) { if(current->Snum==n) { printf(\该学生记录已经存在,请重新输入!\\n\ printf(\输入一个新的学生的记录(先输入学号):\\n\ scanf(\ current=*headp; 30 } else current=current->next; } p->Snum=n;count++; printf(\请输入学号为%ld的选修信息:\\n\\n\ printf(\请输入该生选修课程的数目:\\n\ scanf(\ for(j=m;j p=p->next; } if(b==p->Snum) { SC[j].Sno=b;break; } else {printf(\无法找到!请确认是否已输入该学生的信息。\\n\ } printf(\输入选修的科目编号(1-7):\\n\ scanf(\ while(1) { if(c>=1&&c<=7) {SC[j].SCno=c;break;} else {printf(\请重新选择选修科目!\\n输入你选修的科目的编号(1-7):\\n\ } printf(\输入该选修科目的成绩:\\n\ scanf(\ } scnum=scnum+a; printf(\请输入学生的姓名:\\n\ scanf(\ while(i) 31 { printf(\请输入学生的性别(男/女 1/0):\\n\ scanf(\ if(q==1) {strcpy(p->Ssex,\男\ else if(q==0) {strcpy(p->Ssex,\女\ else printf(\输入错误,请重新输入!\\n\ } printf(\请输入学生的年龄(请输入阿拉伯数字):\\n\ scanf(\ printf(\请输入该学生的所属院系(CS/MA/IS):\\n\ scanf(\ current=*headp; while(p->Snum>current->Snum&¤t->next!=NULL) { last=current; current=current->next; } if(p->Snum<=current->Snum) if(current==*headp) { p->next=*headp; *headp=p; } else { p->next=current; last->next=p; } else { p->next=NULL; current->next=p; } p=*headp; printf(\学号 姓名 性别 年龄 所属院系\\n\ while(p!=NULL) { printf(\ p=p->next; } 32 printf(\选修科目信息如下:\\n\ printf(\ Cno Grade\\n\ for(i=0;i //----------------------------删除一个学生的信息并修改选修科目信息--------------------- void shanchu(struct student **headp,struct StuCourse SC[]) { long no;int i,k,j=0;struct StuCourse a; struct student *p,*last; printf(\请输入要删除学生的学号:\\n\ scanf(\ p=*headp; while(p->Snum!=no&&p->next!=NULL) { last=p; p=p->next; } if(p->Snum==no) { if(p==*headp) *headp=p->next; else { for(i=0;i if(p->Snum==SC[i].Sno) { SC[i].Sno=0; j++; } } last->next=p->next; } free(p); printf(\删除成功!\\n\ } else printf(\系统内无该学生的信息!\\n\ p=*headp; for(i=0;i 33 { for(k=0;k a=SC[i];SC[i]=SC[i+1];SC[i+1]=a; } } scnum=scnum-j; printf(\学号 姓名 性别 年龄 所属院系\\n\ while(p!=NULL) { printf(\ p=p->next; } printf(\选修科目信息如下:\\n\ printf(\ Cno Grade\\n\ for(i=0;i //-------------------------将学生的信息进行排序----------------------- void sort(struct student **headp) { int i,j; struct student *p1,*p2,*p; long num;int age; char name[20],sex[20],dept[10]; printf(\排序如下:\\n\ for(p1=*headp,i=0;i 34 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\ while(p!=NULL) { printf(\ 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(\ { printf(\无法打开文件Student.txt!\\n\ exit(0); } if((fp2=fopen(\ { printf(\无法打开文件SC.txt!\\n\ exit(0); } printf(\请确认是否将数据存储进文件:1.是 2.否:\\n\ scanf(\ while(1) { if(a==1) 35 { for(int i=0;i //----------------------------将信息输出文件-------------------------------- void fileload(struct student **headp,struct StuCourse SC[]) { FILE *fp1,*fp2; struct student *p; p=*headp;int j; if((fp1=fopen(\ { printf(\无法打开文件Student.txt!\\n\ exit(0); } if((fp2=fopen(\ { printf(\无法打开文件SC.txt!\\n\ exit(0); } printf(\如下:\\n\ printf(\学号 姓名 性别 年龄 所属院系\\n\ for(int i=0;i printf(\ } printf(\如下:\\n\ printf(\ Cno Grade\\n\ for(j=0;j 36 { fread(&SC[j],sizeof(struct StuCourse),1,fp2); printf(\ } fclose(fp1);fclose(fp2); } int main() { char code[N]=\ struct student *head;struct StuCourse SC[SIZE]; head=NULL; int t=0,i=0; char choose; int flag=1; while(1) { printf(\请输入密码(输入6位数密码方可使用):\\ninput password:\\n\ while((ch=getch())!='\\r') { user[i++]=ch; putchar('*'); } user[i]='\\0'; t++; if(strcmp(code,user)==0) { printf(\欢迎使用本系统!*****************\\n\ while(flag) { menu(); printf(\请选择:\\n\ scanf(\ switch(choose) { case'1': save(); printf(\ Cno Cname Ccredit\\n\ load(); getchar();getchar();break; case'2': printf(\请分别输入学生的学号,姓名,性别,年龄以及所属院系\\n\\n\ input(&head); getchar();getchar();break; 37 case'3': xuxiuinput(&head,SC); getchar();getchar();break; case'4': find(&head,SC); getchar();getchar();break; case'5': modify(&head,SC); getchar();getchar();break; case'6': insert(&head,SC); getchar();getchar();break; case'7': shanchu(&head,SC); getchar();getchar();break; case'8': sort(&head); getchar();getchar();break; case'9': filesave(&head,SC);fileload(&head,SC); getchar();getchar();break; case'0':flag=0; printf(\ ***The End!*** \\n\ break; default: printf(\ 选择错误,重选! \\n\ } } break; } else { if(t<3) printf(\密码错误,请重新输入!\\n\ else { printf(\对不起,你无权使用本系统! 退出系统!\\n请在30秒后再进行操作!\\n\ break; } } } return 0; } 38 参考文献: [1] 谭浩强. C程序设计(第四版). 北京:清华大学出版社,2005 [2] 《C++程序设计》 钱能 清华大学出版社 [3] 网上相关资料 39
正在阅读:
数据结构课程设计(C语言)03-27
汽车销售员要具备什么条件05-21
初中数学“最值问题”_集锦05-07
中央电大2010-2011学年度第一学期机电控制与可编程序控制器技术06-09
结合具体事例分析文化遗产的社会功能09-26
做风筝作文800字07-15
小学英语教师演讲比赛08-24
我家乡的文化遗产 - 图文06-04
法院工作室主任先进个人事迹材料03-12
交通安全培训记录04-30
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 数据结构
- 语言
- 课程
- 设计
- 第一章建筑给水 第一节 建筑给水系统概述
- 关于matlab绘图中字体及图片大小等的设置
- (JAVA) - 3级 - 理论知识复习题
- 国务院在京各部门因解决干部夫妻两地分居从京外调(迁)入人员审
- 黄石二十中袁文汇名著导读论语导学案 - 图文
- 小微企业信贷风险防控(下)
- 赵州桥说课稿
- 住宅燃气输送用不锈钢波纹软管施工及验收规程
- ABS型材挤出成型技术
- 陶瓷材料介入当代艺术 - 图文
- 我 眼 中 的 高 效 课 堂
- 关于南部侗族传统文化变迁的研究夏彩云 - 图文
- 医药行业的人力资源管理现状
- 6个成语,洞见老子智慧
- 关于对西方资本主义国家社会保障制度的探究
- 起重机安装自检报告
- 2019版高中语文 第四单元 文明的踪迹 第9课 兰亭集序学案 鲁人版
- 第三章 市场法 教案
- SP短信开发技术文档(DOC45页)
- 人工肛门护理操作规程