学生管理系统课程设计报告_第1页
学生管理系统课程设计报告_第2页
学生管理系统课程设计报告_第3页
学生管理系统课程设计报告_第4页
学生管理系统课程设计报告_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成功是失败之母,一切都是努力的结果 页脚内容22 湖南工业大学 课程设计任务书 2012 2013学年第 一学期 计算机与通信 学院(系、部) 软件工程 专业 姓名:夏笑声 课程名称: 设计题目: 班级1202 完成期限: 进 度 安 排 面向过程程序设计课程设计 学生信息管理系统 自 2012 年 12 月 26 日至 2012 年 12 月28日共 三天 用C语言设计一个学生信息管理系统软件,要求实现以下功能: 1. 建立文件功能 ? 可以使用默认文件名,或制定文件名将记录存储到文件 ? 文件保存成功要有提示 ? 初次使用可以新建一个保存文件 2. 录入学生信息功能 ?可以随时录入制定人数

2、信息的功能 3. 查询功能 ?可以通过输入学号查询制定学生信息功能 ?可以通过输入姓名查询制定学生信息功能 4. 删除记录功能 可以通过学生的姓名或学号信息删除学生的信息 5. 修改记录功能 可以通过学生的姓名或学号信息修改任意一项指定的信息 6. 按总分排序功能 可以按照学生的总分成绩排好序将所有学生的信息显示出来 7. 退出 可以在程序运行时很方便地退出程序 起止日期 工作内容 程序基本设计思路 编辑核心代码和程序模块,修改程序增加部分功能 再次修改,调试;完成设计文档和课程设计说明书答 辩 2012年12月28日 指导教师(签字): 系教研室)主任(签字): 敝2疗/孝 HUNAN UN

3、liVERSITV OF TECHNOLOGY 计算机与通信学院 面过程程序设计课程设计 学生信息管理系统 12408300239 专业及班级 软件工程1202 夏笑声 2012/12/28 目录 、实验目的和要求 1课程设计的目的 2、课程设计的要求 二、设计方案 1、总体设计 2、系统流程图 .4 17 3、程序说明书. 三、总结与体会 四、 参考资料 18 实验目的和要求 1、课程设计目的: 1、 2、 使学生巩固和加强“ C语言程序设计”课程的理论知识。 使学生掌握C语言程序设计的方法及编程技巧。 3、进一步理解和运用结构化程序设计的思想和方法。、 5、初步掌握开发一个小型实用系统的基

4、本方法: 结合实际应用的要求,使课程 设计既覆盖知识点,又接近工程的实际需要。 6培养学生良好的程序设计风格。、 7、 掌握书写程序设计开发文档的能力,使学生学会撰写课程设计报告。、 8、通过查阅手册和文献资料,。培养学生独立分析问题和解决问题的能力。、 9、培养学生的创新能力和创新思维。 2、基本要求: (1)要求利用结构化程序设计的方法及 C语言的编程思想来完成系统设计。 (2)模块化程序设计:要求在设计过程中,按功能定义函数或书写多个文件, 进行模块化设计,各个功能模块用函数的形式来实现。 (3)学生所选课题必须上机通过,并获得满意的结果。 (4)程序书写风格:锯齿型书写格式。 1、总体

5、设计 该程序共有6大模块构成,程序的开头首先是一个欢迎界面,欢迎界面的 下方有提示信息按回车键继续,这时按下回车键,界面跳转到程序的主界面,各 功能菜单项。此程序一共有六大功能,全部通过定义函数来实现功能。主要有以 下几项基本功能:1.信息录入功能2.信息查询功能3.删除记录功能4.修改记录功 能5.按总分排序输出所有信息功能,6.退出程序功能。 3、程序说明书 此程序在实现功能时采用的方式是编写函数,通过编写的5个函数来实现该 程序的五大基本功能。主要功能有信息录入、信息查询、删除记录、修改指定记 录、输出所有学生信息,以及退出程序功能。首先将一系列头文件包含进来以及 定义文件指针和定义了一

6、个结构数组用来存储学生的所有信息,源代码如下: #i ncludevstdio.h #i ncludevstdlib.h #in clude #in elude vp rocess.h struct node char id12; char n ame15; char fale4; int score3; int all; int _size; stude nt50; struct no de2 char id12; char n ame15; char fale4; char score44; char all4; ; FILE *fr; struct node *p=stude nt; c

7、har _class410=C 语言,大机,高数,英语; int nu mber; void luru(); void chax un(); void sha nchu(); void p aixu(); void xiugai(); void mai n() 打开程序,首先可以看到的是一个精美的欢迎界面,该界面由如下代码实现: prin tf(nnnnnnnnnnnn); printf( printf( printf( printf( printf( printf( 夏笑声 * * * * * * * * printf( printf(nnnnn 按回车键继续.); 欢迎界面如下图所示: C

8、iDociu ents and S ettf)l面学主営理系编hU亡bu 就学生甘- 験翎专时骗专齢皤皤时齢辭騎貓6(鶴 2!n); 3!n); 4!n); printf(请选择功能:n); printf(信息录入请按 printf(信息查询请按 printf(删除记录请按 printf(修改记录请按 printf(按总分排序输出所有信息请按5! n); printf(按0或其它任意键退出.n); 3? C ; Ddcub ents and S ett面学生昔理盞握ID亡学半吿- 1Hl| D 注意=在开始使用wratL. M靜尹幫呂件黯除原有数据鲁按舉! 鲁廉鶏検!I 信息査询请:範申 删除

9、忧录请 修改记录W 7京3 7 Sr |QQP zLnyzLn - 这时,我们在菜单的最上方可以看到一条警示信息,“注意:在第一次使用本软 件之前,必须先建立一个存储文件”,这是因为此程序需要一个文件来将所有学 生的各项信息存储在外存中,只有这样才能使已经记录的信息能够永久保存。这 项功能我采用的是用“ W+ ”的方式打开文件,之所以这样设计,是因为用“ W+ ” 的方式打开文件使程序获得的一个额外功能,当按下“8”键的时候,可以将所 有已经保存的记录全部清楚掉,即初始化记录功能,这样就做到了一举两得了。 接下来介绍的是程序的信息录入功能。在设计信息录入功能时,我也遇到了 不少的问题,其中最大

10、的一个问题就是关于如何将要存储的程序写入文件,很显 然,如果将输入的信息一股脑的写入文件的话,后果将是非常严重的,因为写入 的信息始终是要读出来的,而如果随意地写进去的话,在读取信息的时候,读取 信息的位置指针将无法定位,因为写入的时候没有按照一定的规律。对于这个问 题,我采用的解决办法的将所有学生的信息采用一定的格式写入文件,学号统一 采用11位数字的格式,姓名统一采用占 6各字节的格式,性别采用两个字节也 就是一个中文字符的格式,后面是各科分数,全部采用占3个字节的格式,这样 采用一种统一的格式将学生的信息按照顺序一个接着一个写入文件。源代码如 下: for(i=0;iv_n1;i+) p

11、rintf(请输入第%d位学生的学号,按0退出此次录入! : n,i+1); sea nf(%s, pn umber.id); getcharO;用于吃掉回车符 /设置中途退 if(!(stre mp(pnu mber.id,_cheshi5) 出功能(如果中途不想继续输入的话) fclose(fr); 来控制当中途退出时能将已输入的信息及时存到外存中 /此句用 break; if(strle n(pnu mber.id)!=11) printf(输入的学号有误!学号为标准的11位数,请重新输入:n); i-; con ti nue; else fprin tf(fr,%s, pnu mber

12、.id); Ioop2: printf(请输入第%d位学生的姓名(仅支持中文):n,i+1); gets( pnu mber .n ame); if(strle n(pnu mber. name)=O|strle n(pnu mber. name)6) printf(姓名长度不符合要求,请重新输入!n); goto Ioop2; fprin tf(fr,%s, pnu mber. name); a仁strle n(pnu mber .n ame); /在姓名不足三个字的后用空格补齐 a2=3-(a1/2); for(b2=1;b2=a2;b2+) fprin tf(fr,); loop7: p

13、rintf(请输入性别:n); gets( pnu mber.fale); if(strle n(pnu mber.fale)!=2) prin tf(性别输入有误,请重新输入!n); goto Ioop7; else fprin tf(fr,%2s, pnu mber.fale); pnu mber.all=0;将总分初始化 for(j=0;j4;j+) printf(请输入第 %d 位学生的 %s成绩:n,i+1,_classj); sca nf(%s,xj); fprin tf(fr,%-3s,xj); _x1=atoi(x1); _x2=atoi(x2); _x3=atoi(x3);

14、_x4=atoi(x4); _x5=_x1+_x2+_x3+_x4; fprin tf(fr,%-3d,_x5); printf(第%d位学生的信息输入成功!n,i+1); fclose(fr); printf(录入结束,按回车回主菜单! getcharO; getcharO; system(cls); else prin tf(a); printf(超出最大人数,请重新输入! 在读取文件时位置指针移动的问题就解决啦。 n); n); 其次是,在信息存储的过程中,我 还考虑到了使用者在使用时可能遇到的尽可能多的问题,如若输入的学号小于 11位,便会有输入错误提醒,还有一个非常使用的是当使用着在

15、进行信息录入 的过程中,可以随时地退出该功能,在录入成功后会有录入成功的提示信息。并 且,为了使程序在使用时不会显得过于呆板,我还在警示信息显示的同时加入了 声音警示的功能,如学号输入错误不仅有文字提示而且有声音提示, printf(a);这样使程序看起来显得更加人性化。 程序的第二个功能是信息查询功能。很显然,没有查询的功能,写得再好的 录入功能也相当于白写。进入信息查询功能的菜单键是2数字键,进入该功能后 会有提示输入要查询的学生的学号或姓名,在设计该查询功能时,我采用的是 strcmp函数来比较字符串的方式,来将输入的要查询的字符与文件中当前有的各 信息一一匹配,当找到相同的学号或姓名时

16、,立即退出匹配的循环。源代码如下: for(i=0;iv50;i+)/将所有学生的学生跟已经录入的学号配对 fscan f(fr,%11s,_id); fscan f(fr,%6s,_name); if(!strc mp (shuru,_id)|(!strc mp (shuru,_ name) printf(学号:%sn,_id); printf(姓名:%sn,_name); fsca nf(fr,%2s,_fale); printf(性别:%2sn,_fale); for(j=0;j4;j+) fsca nf(fr,%3s,fe n); printf(%s 的成绩为:%sn,_classj,

17、fen); fsca nf(fr,%3s,_all); printf(总分:%3sn,_all); zhua ngtai=0; /标记说明已查找到记录 break; else fseek(fr,16,1); /将光标移到下一次要配对的前一个,以测定该信息是否为最后一条 cheshi=fgetc(fr); if(cheshi=EOF) break; if(zhua ngtai) prin tf(a); printf(不存在该学号的学生!n); fclose(fr); printf(按回车键回主菜单.n); getchar(); getchar(); system(cls); 查询的界面如下: c

18、T C:Dacv*eiLt s ulJ1: 面 I 学生首理系红 111电1口0 学生曽理紊统H13E3 信a录入请:茲! 詹息査询请宏! 修跖己柔潼安4! 筮J硯铀盘f有信息请按 ! 技阿虽它任尽囱屋岀 2 请输入查询的学空的学号或姓名: B 这样写有一个好处就是使查询所要提供的信息不仅仅局限于姓名或着是学号,这 样就更方便使用者的需要。 若查到结果则在屏幕上显示已查到的结果: for(i=0;iv50;i+) /将所有学生的学生跟已经录入的学号配对 fscan f(fr,%11s,_id); fscan f(fr,%6s,_name); if(!strc mp (shuru,_id)|(!

19、strc mp (shuru,_ name) printf(学号:%sn,_id); printf(姓名:%sn,_name); fsca nf(fr,%2s,_fale); printf(性别:2sn,_fale); for(j=0;j4;j+) fsca nf(fr,%3s,fe n); printf(%s 的成绩为:%sn,_classj,fen); fsca nf(fr,%3s,_all); printf(总分:%3sn,_all); zhua ngtai=0; /标记说明已查找到记录 break; else fseek(fr,16,1); /将光标移到下一次要配对的前一个,以测定该信

20、息是否为最后一条 cheshi=fgetc(fr); if(cheshi=EOF) break; 在设计此功能时,我也考虑到了查询信息不存在的问题, 当使用者输入的 ,而且, 同样, 要查询的信息不存在时,会有文字和声音提示“未找到要查询的记录” 在执行此功能的过程中,也设置了随时退出查询的功能。功能界面如下: C : Ddcub ents and 5 tiw;B 蜩己录逋遠3, g总駁霾册有售息请按占!I 按0或其它任卮、犍退出H 鲁输入要删除的爭生的姓名或学号!I in于in -: Un 在查找要删除 记录的位置时,我采用的方式是先将所有信息先存入一个结构数组,源代码如下: for(i=0

21、;iv50;i+)/先将所有信息读入一个结构数组 _cheshi4=fgetc(fr); if(_cheshi4=E0F) break; else fseek(fr,-1,1); fscan f(fr,%11s,stude nt5i.id); fscan f(fr,%6s,stude nt5i. name); fscan f(fr,%2s,stude nt5i.fale); fscan f(fr,%3s, fscan f(fr,%3s, fscan f(fr,%3s, fscan f(fr,%3s, fscan f(fr,%3s, 至于查找要删除信息的位置跟信息查询功能查找的方式是一样的,即将

22、所输入的 学号或姓名跟已存在的信息一一匹配, 当找到要删除的记录时,立即退出匹配的 循环。源代码如下: for(j2=0;j2i;j2+) if(!strc mp (_shuru2,stude nt5j2.id)|!strc mp (_shuru2,stude nt5j2. name) _biaoji=j2; 而且还增加了删除记录未找到的反应机制 if(_biaoji=51) prin tf(a); printf(未找到要删除的记录!n); 这样就 首先要输入要删除的 (按0取消修改)n); 程序的第四大功能是修改记录功能。设计此功能的目的是考虑到当使用者只 要修改某个学生的某一项信息但又不想

23、修改其他信息时就可以采用修改记录功 能,此功能可以按照使用者的意图选择性的修改学生的某项指定的记录。 比将该学生的记录全部删除然后又重新存进去要方便多了。 学生的姓名或学号,以确定操作对象,代码如下: printf(请输入要修改信息的学生的姓名或学号! sca nf(%s,_shuru2); /设置退出修改功能 if(strc mp (_cheshi8,_shuru2) fseek(fr,0,0); for(i=0;i6) printf(输入姓名长度不符合要求,请重新输入!n); goto Ioop3; strc py(stude nt4. name,_xi n); break; case 3

24、: loop4:printf(请输入要修改的性别.n); sca nf(%s,_xi n); if(strle n(_xin )!=2) prin tf(a); printf(性别输入有误,请重新输入!n); goto Ioop4; else strc py(stude nt4.fale,_xi n); break; 如果选择要修改的分数,又会提示让你选择要修改分数的科目: s VDacxuent s and Ee it:1 面I学生管邂系申学生管d 改信息的学生的姓名或学号!饰取消修改 ISSg修改Ki项 I黔夸技1 修改 僅改分数请按4 请选疇修改的成绩. C语言唾1 央语请按勺. d A

25、扇 case 4: printf(请选择要修改的成绩:n); loop6: printf(C语言请按1n大机请按2n高数请按3门英语请按4.n); sea nf(%s,_xua nzhe); xua nzhe=atoi(_xua nzhe); switch(xua nzhe) case 1: printf(请输入要修改的学号:n); scan f(%s,_xi n); if(strle n(_xin )=11) strc py(stude nt4.id,_xi n); else prin tf(a); printf(输入学号有误,学号为11位数,请重新输入! n); goto Ioop3; b

26、reak; case 2: loop3:printf(请输入要修改的姓名(仅支持3个字以内中文):n); scan f(%s,_xi n); if(strle n(_xi n)=0|strle n(_xin )6) printf(输入姓名长度不符合要求,请重新输入!n); goto Ioop3; strc py(stude nt4. name,_xi n); break; if C ; llocMe3it5 aad S生管理羔薮iD上bm. 信息存储文件请按9! 注S:在第1次僥坤本件之前, 必须先建立信息#储文建立 建立#储文件或靖除原有数据请擬? ? ! 请选择功能亠 信息5入请汝1! 宿

27、息查询请藐* 帳址录埴宙亨 修改记录诡決处 襄足钳有信息请捧! 抿0或冥匕任思退出 4 请输入募修改信息的学生的姓名或学号!磁卿消修改 接下来介绍的程序的第五大功能一一输出所有学生信息的功能。 当然杂乱地输出所有 信息可以说是好无意义的,因此,我在设计此功能时采用了一个冒泡排序, 将所有学生的信 息按照总分从大到小依次输出。具体是先将所有学生的信息先存储在一个结构数组中: for(_n 2=0;_ n250;_n2+) _cheshi4=fgetc(fr); if(_cheshi4=EOF) fseek(fr,-1,1); break; else ; fseek(fr,-1,1); fsca

28、nf(fr,%11s,stude nt6L n2.id); fsca nf(fr,%6s,stude nt6|_ n2. name); fsca nf(fr,%2s,stude nt6|_ n2.fale); fsca nf(fr,%3s,stude nt6L n2.score0); fsca nf(fr,%3s,stude nt6L n2.score1); fsca nf(fr,%3s,stude nt6L n2.score2); fsca nf(fr,%3s,stude nt6L n2.score3); fsca nf(fr,%3d, qiu0=atoi(stude nt6L n2.sco

29、re0); qiu1=atoi(stude nt6L n2.score1); qiu2=atoi(stude nt6L n2.score2); qiu3=atoi(stude nt6L n2.score3); stude nt6L n2.all=qiu0+qiu1+qiu2+qiu3; 然后用了一个冒泡排序: for(i=0;ijilu+1;i+)for(j=0;jilu-1;j+) if(stude nt6j.all)(stude nt6j+1.all) stude nt4=stude nt6|j; stude nt6j=stude nt6j+1; stude nt6j+1=stude nt4; ,退出功能在此程序中可以说无处不在, 因为我在设计各项功能时 在执行各个功能时,随时都可以退出到主菜单。但这里所说的退出 没有退出的功能,有了该功能将可以使程序在运行时可以很方便地 按总分排好序之后就是输出信息了,输出信息的时候,我采用的是一个学生的所有信 息在一行输出,这样可以使使用者在查看的时候显得更加清楚明了。 最后就是退出功能。 都考虑到了退出的问题, 功能是指退出程序功能, 退出。 三.总结与体会 至今我仍感慨颇多,的确,从从拿到题目到完成整个编程, 回顾起此次课程设计, 从理论到实践,在整整半个学期的日子

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论