版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上湖南工业大学课程设计任务书2012 2013学年第 一学期 计算机与通信 学院(系、部) 软件工程 专业 姓名:夏笑声 班级 1202 课程名称: 面向过程程序设计 课程设计 设计题目: 学生信息管理系统 完成期限:自 2012 年 12 月 26 日至 2012 年 12 月28日共 三天内容及任务 用C语言设计一个学生信息管理系统软件,要求实现以下功能:1.建立文件功能Ø 可以使用默认文件名,或制定文件名将记录存储到文件Ø 文件保存成功要有提示Ø 初次使用可以新建一个保存文件2.录入学生信息功能Ø 可以随时录入制定人数信息的
2、功能3.查询功能Ø 可以通过输入学号查询制定学生信息功能Ø 可以通过输入姓名查询制定学生信息功能4.删除记录功能可以通过学生的姓名或学号信息删除学生的信息5修改记录功能可以通过学生的姓名或学号信息修改任意一项指定的信息6按总分排序功能可以按照学生的总分成绩排好序将所有学生的信息显示出来7.退出可以在程序运行时很方便地退出程序进度安排起止日期工作内容第1天程序基本设计思路第2天 编辑核心代码和程序模块,修改程序,增加部分功能第3天 再次修改,调试;完成设计文档和课程设计说明书答辩指导教师(签字): 2012年12月28日 系教研室)主任(签字): 年 月 日计算机与通信学院面
3、过程程序设计课程设计题 目 学生信息管理系统 学 号 专业及班级 软件工程1202 姓 名 夏笑声 日 期 2012/12/28 目录1、 实验目的和要求.41、课程设计的目的42、课程设计的要求4二、设计方案. 41、总体设计.42、系统流程图.53、 程序说明书.4 三、总结与体会.17四、 参考资料 .18一、 实验目的和要求1、课程设计目的:1、使学生巩固和加强“C语言程序设计”课程的理论知识。2、使学生掌握C语言程序设计的方法及编程技巧。3、进一步理解和运用结构化程序设计的思想和方法。、5、 初步掌握开发一个小型实用系统的基本方法:结合实际应用的要求,使课程设计既覆盖知识点,又接近工
4、程的实际需要。6、培养学生良好的程序设计风格。、7、掌握书写程序设计开发文档的能力,使学生学会撰写课程设计报告。、8、通过查阅手册和文献资料,。培养学生独立分析问题和解决问题的能力。、9、培养学生的创新能力和创新思维。2、基本要求:(1)要求利用结构化程序设计的方法及C语言的编程思想来完成系统设计。(2)模块化程序设计:要求在设计过程中,按功能定义函数或书写多个文件,进行模块化设计,各个功能模块用函数的形式来实现。(3)学生所选课题必须上机通过,并获得满意的结果。(4)程序书写风格:锯齿型书写格式。二、 设计方案1、总体设计 该程序共有6 大模块构成,程序的开头首先是一个欢迎界面,欢迎界面的下
5、方有提示信息按回车键继续,这时按下回车键,界面跳转到程序的主界面,各功能菜单项。此程序一共有六大功能,全部通过定义函数来实现功能。主要有以下几项基本功能:1.信息录入功能2.信息查询功能3.删除记录功能4.修改记录功能5.按总分排序输出所有信息功能,6.退出程序功能。3、程序说明书 此程序在实现功能时采用的方式是编写函数,通过编写的5个函数来实现该程序的五大基本功能。主要功能有信息录入、信息查询、删除记录、修改指定记录、输出所有学生信息,以及退出程序功能。首先将一系列头文件包含进来以及定义文件指针和定义了一个结构数组用来存储学生的所有信息,源代码如下:#include<stdio.h&g
6、t;#include<stdlib.h>#include<string.h>#include<process.h>struct nodechar id12;char name15;char fale4;int score3;int all;int _size;student50;struct node2char id12;char name15;char fale4;char score44;char all4;FILE *fr;struct node *p=student;char _class410="C语言","大机&qu
7、ot;,"高数","英语"int number;void luru();void chaxun();void shanchu();void paixu();void xiugai();void main() 打开程序,首先可以看到的是一个精美的欢迎界面,该界面由如下代码实现:printf("nnnnnnnnnnnn"); printf(" &$&$&$&&$&$&$&$&$&$&$&$&$&&$&$
8、&$&$&$&$&$&n");printf(" &$&$&$&$&&$&&$&$&$&$&$&$&$&$&$&$&&$&$&$&$n");printf(" && * * &$n"); printf(" &$ * * * * &$n");printf(" &
9、amp;$ *欢迎使用学生管理系统* &$n");printf(" &$ &$n");printf(" &$ * * * 制作人:夏笑声 * * * * * * * * &$n");printf(" &&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$&$n");printf(" &a
10、mp;$&$&$&$&$&$&$&$&$&$&$&$&$&$&&$&$&$&$&$&$nnnnnnn");printf("nnnnn按回车键继续.");欢迎界面如下图所示:同时,在屏幕的左下方有按回车键继续的提示信息,这时按一下回车键,由欢迎界面跳转到程序的主功能菜单界面,菜单由switch语句实现,如下:printf("请选择功能:n"); printf("信息录入请按1!n
11、"); printf("信息查询请按2!n"); printf("删除记录请按3!n"); printf("修改记录请按4!n"); printf("按总分排序输出所有信息请按5!n"); printf("按0或其它任意键退出.n");这时,我们在菜单的最上方可以看到一条警示信息,“注意:在第一次使用本软件之前,必须先建立一个存储文件”,这是因为此程序需要一个文件来将所有学生的各项信息存储在外存中,只有这样才能使已经记录的信息能够永久保存。这项功能我采用的是用“w+”的方式打开文件,之
12、所以这样设计,是因为用“w+” 的方式打开文件使程序获得的一个额外功能,当按下“8”键的时候,可以将所有已经保存的记录全部清楚掉,即初始化记录功能,这样就做到了一举两得了。 接下来介绍的是程序的信息录入功能。在设计信息录入功能时,我也遇到了不少的问题,其中最大的一个问题就是关于如何将要存储的程序写入文件,很显然,如果将输入的信息一股脑的写入文件的话,后果将是非常严重的,因为写入的信息始终是要读出来的,而如果随意地写进去的话,在读取信息的时候,读取信息的位置指针将无法定位,因为写入的时候没有按照一定的规律。对于这个问题,我采用的解决办法的将所有学生的信息采用一定的格式写入文件,学号统一采用11位
13、数字的格式,姓名统一采用占6各字节的格式,性别采用两个字节也就是一个中文字符的格式,后面是各科分数,全部采用占3个字节的格式,这样采用一种统一的格式将学生的信息按照顺序一个接着一个写入文件。源代码如下:for(i=0;i<_n1;i+)printf("请输入第%d位学生的学号,按0退出此次录入!:n",i+1);scanf("%s",pnumber.id);getchar(); /用于吃掉回车符if(!(strcmp(pnumber.id,_cheshi5) /设置中途退出功能(如果中途不想继续输入的话)fclose(fr); /此句用来控制当中途
14、退出时能将已输入的信息及时存到外存中break;if(strlen(pnumber.id)!=11)printf("输入的学号有误!学号为标准的11位数,请重新输入:n");i-;continue;elsefprintf(fr,"%s",pnumber.id);loop2:printf("请输入第%d位学生的姓名(仅支持中文):n",i+1);gets();if(strlen()=0|strlen()>6)printf("姓名长度不符合要求,请重新
15、输入!n");goto loop2;fprintf(fr,"%s",);a1=strlen();a2=3-(a1/2);for(b2=1;b2<=a2;b2+)fprintf(fr,""); /在姓名不足三个字的后用空格补齐loop7:printf("请输入性别:n");gets(pnumber.fale);if(strlen(pnumber.fale)!=2)printf("性别输入有误,请重新输入!n");goto loop7;else fprin
16、tf(fr,"%2s",pnumber.fale);pnumber.all=0; /将总分初始化for(j=0;j<4;j+)printf("请输入第%d位学生的%s成绩:n",i+1,_classj);scanf("%s",xj);fprintf(fr,"%-3s",xj);_x1=atoi(x1);_x2=atoi(x2);_x3=atoi(x3);_x4=atoi(x4);_x5=_x1+_x2+_x3+_x4;fprintf(fr,"%-3d",_x5);printf("
17、第%d位学生的信息输入成功!n",i+1);fclose(fr);printf("录入结束,按回车回主菜单!n");getchar();getchar();system("cls");elseprintf("a");printf("超出最大人数,请重新输入!n");在读取文件时位置指针移动的问题就解决啦。其次是,在信息存储的过程中,我还考虑到了使用者在使用时可能遇到的尽可能多的问题,如若输入的学号小于11位,便会有输入错误提醒,还有一个非常使用的是当使用着在进行信息录入的过程中,可以随时地退出该功能,在录
18、入成功后会有录入成功的提示信息。并且,为了使程序在使用时不会显得过于呆板,我还在警示信息显示的同时加入了声音警示的功能,如学号输入错误不仅有文字提示而且有声音提示,printf("a");这样使程序看起来显得更加人性化。 程序的第二个功能是信息查询功能。很显然,没有查询的功能,写得再好的录入功能也相当于白写。进入信息查询功能的菜单键是2数字键,进入该功能后会有提示输入要查询的学生的学号或姓名,在设计该查询功能时,我采用的是strcmp函数来比较字符串的方式,来将输入的要查询的字符与文件中当前有的各信息一一匹配,当找到相同的学号或姓名时,立即退出匹配的循环。源代码如下:for
19、(i=0;i<50;i+) /将所有学生的学生跟已经录入的学号配对fscanf(fr,"%11s",_id);fscanf(fr,"%6s",_name);if(!strcmp(shuru,_id)|(!strcmp(shuru,_name)printf("学号:%sn",_id);printf("姓名:%sn",_name);fscanf(fr,"%2s",_fale);printf("性别:%2sn",_fale);for(j=0;j<4;j+)fscanf(
20、fr,"%3s",fen);printf("%s的成绩为:%sn",_classj,fen);fscanf(fr,"%3s",_all);printf("总分:%3sn",_all);zhuangtai=0; /标记说明已查找到记录break;else fseek(fr,16,1); /将光标移到下一次要配对的前一个,以测定该信息是否为最后一条cheshi=fgetc(fr);if(cheshi=EOF)break;if(zhuangtai)printf("a");printf("不存
21、在该学号的学生!n");fclose(fr);printf("按回车键回主菜单.n");getchar();getchar();system("cls");查询的界面如下:这样写有一个好处就是使查询所要提供的信息不仅仅局限于姓名或着是学号,这样就更方便使用者的需要。若查到结果则在屏幕上显示已查到的结果:for(i=0;i<50;i+) /将所有学生的学生跟已经录入的学号配对fscanf(fr,"%11s",_id);fscanf(fr,"%6s",_name);if(!strcmp(shuru,_i
22、d)|(!strcmp(shuru,_name)printf("学号:%sn",_id);printf("姓名:%sn",_name);fscanf(fr,"%2s",_fale);printf("性别:%2sn",_fale);for(j=0;j<4;j+)fscanf(fr,"%3s",fen);printf("%s的成绩为:%sn",_classj,fen);fscanf(fr,"%3s",_all);printf("总分:%3sn&
23、quot;,_all);zhuangtai=0; /标记说明已查找到记录break;else fseek(fr,16,1); /将光标移到下一次要配对的前一个,以测定该信息是否为最后一条cheshi=fgetc(fr);if(cheshi=EOF)break;同样,在设计此功能时,我也考虑到了查询信息不存在的问题,当使用者输入的要查询的信息不存在时,会有文字和声音提示“未找到要查询的记录”,而且,在执行此功能的过程中,也设置了随时退出查询的功能。功能界面如下: 接下来介绍的是删除记录功能。同样,删除记录功能也是非常需要的,当某个学生的信息不再需要时,如果继续保存,将使学生的信息管理变得越来越复
24、杂,因此,删除多余的记录是非常有必要的。删除功能的界面如下:在查找要删除记录的位置时,我采用的方式是先将所有信息先存入一个结构数组,源代码如下:for(i=0;i<50;i+) /先将所有信息读入一个结构数组_cheshi4=fgetc(fr);if(_cheshi4=EOF)break;elsefseek(fr,-1,1);fscanf(fr,"%11s",student5i.id);fscanf(fr,"%6s",);fscanf(fr,"%2s",student5i.fale);fscanf(f
25、r,"%3s",&student5i.score0);fscanf(fr,"%3s",&student5i.score1);fscanf(fr,"%3s",&student5i.score2);fscanf(fr,"%3s",&student5i.score3);fscanf(fr,"%3s",&student5i.all);至于查找要删除信息的位置跟信息查询功能查找的方式是一样的,即将所输入的学号或姓名跟已存在的信息一一匹配,当找到要删除的记录时,立即退
26、出匹配的循环。源代码如下:for(j2=0;j2<i;j2+)if(!strcmp(_shuru2,student5j2.id)|!strcmp(_shuru2,)_biaoji=j2;而且还增加了删除记录未找到的反应机制if(_biaoji=51)printf("a");printf("未找到要删除的记录!n");程序的第四大功能是修改记录功能。设计此功能的目的是考虑到当使用者只要修改某个学生的某一项信息但又不想修改其他信息时就可以采用修改记录功能,此功能可以按照使用者的意图选择性的修改学生的某项指定的记录。这样就比
27、将该学生的记录全部删除然后又重新存进去要方便多了。首先要输入要删除的学生的姓名或学号,以确定操作对象,代码如下:printf("请输入要修改信息的学生的姓名或学号!(按0取消修改)n");scanf("%s",_shuru2);if(strcmp(_cheshi8,_shuru2) /设置退出修改功能fseek(fr,0,0);for(i=0;i<50;i+) _cheshi1=fgetc(fr);if(_cheshi1=EOF)printf("a");printf("未找到要修改的记录!n");goto l
28、oop8;fseek(fr,-1,1);fscanf(fr,"%11s",student4.id);fscanf(fr,"%6s",);if(!strcmp(_shuru2,student4.id)|(!strcmp(_shuru2,)fseek(fr,17,1);break;elsefseek(fr,17,1);在找到要修改的对象后,就要选择要修改的项目,使用者可以通过选择的方式选择所要修改的项,代码如下:printf("请选择要修改的项.n");printf("修改学号
29、请按1n");printf("修改姓名请按2n");printf("修改性别请按3n");printf("修改分数请按4n");scanf("%s",_xiang);xiang=atoi(_xiang);switch(xiang)case 1:printf("请输入要修改的学号:n");scanf("%s",_xin);if(strlen(_xin)=11)strcpy(student4.id,_xin);elseprintf("a");prin
30、tf("输入学号有误,学号为11位数,请重新输入!n");goto loop3;break;case 2:loop3:printf("请输入要修改的姓名(仅支持3个字以内中文):n");scanf("%s",_xin);if(strlen(_xin)=0|strlen(_xin)>6)printf("输入姓名长度不符合要求,请重新输入!n");goto loop3;strcpy(,_xin);break;case 3:loop4:printf("请输入要修改的性别.n&qu
31、ot;);scanf("%s",_xin);if(strlen(_xin)!=2)printf("a");printf("性别输入有误,请重新输入!n");goto loop4;elsestrcpy(student4.fale,_xin);break;如果选择要修改的分数,又会提示让你选择要修改分数的科目:case 4:printf("请选择要修改的成绩:n");loop6:printf("C语言请按1n大机请按2n高数请按3n英语请按4.n");scanf("%s",_xu
32、anzhe);xuanzhe=atoi(_xuanzhe);switch(xuanzhe)case 1: printf("请输入要修改的学号:n");scanf("%s",_xin);if(strlen(_xin)=11)strcpy(student4.id,_xin);elseprintf("a");printf("输入学号有误,学号为11位数,请重新输入!n");goto loop3;break;case 2:loop3:printf("请输入要修改的姓名(仅支持3个字以内中文):n");s
33、canf("%s",_xin);if(strlen(_xin)=0|strlen(_xin)>6)printf("输入姓名长度不符合要求,请重新输入!n");goto loop3;strcpy(,_xin);break; 接下来介绍的程序的第五大功能输出所有学生信息的功能。当然杂乱地输出所有信息可以说是好无意义的,因此,我在设计此功能时采用了一个冒泡排序,将所有学生的信息按照总分从大到小依次输出。具体是先将所有学生的信息先存储在一个结构数组中:for(_n2=0;_n2<50;_n2+)_cheshi4=fgetc(
34、fr);if(_cheshi4=EOF)fseek(fr,-1,1);break;else ;fseek(fr,-1,1);fscanf(fr,"%11s",student6_n2.id);fscanf(fr,"%6s",student6_);fscanf(fr,"%2s",student6_n2.fale);fscanf(fr,"%3s",student6_n2.score0);fscanf(fr,"%3s",student6_n2.score1);fscanf(fr,"
35、;%3s",student6_n2.score2);fscanf(fr,"%3s",student6_n2.score3);fscanf(fr,"%3d",&_laji);qiu0=atoi(student6_n2.score0);qiu1=atoi(student6_n2.score1);qiu2=atoi(student6_n2.score2);qiu3=atoi(student6_n2.score3);student6_n2.all=qiu0+qiu1+qiu2+qiu3;然后用了一个冒泡排序:for(i=0;i<_jilu+1;i+)for(j=0;j<_jilu-1;j+)if(student6j.all)<(student6j+1.all)student4=student6j;student6j=student6j+1;student6j+1=student4;按总分排好序之后就是输出信息了,输出信息的时候,我采用的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 技术类企业工会活动的组织与策划技巧
- 内部食堂如何管理制度
- 农发行内部制度
- 金立手机产品研发人员招聘问题探讨
- 员工内部劳务结算制度
- 售楼处内部服务管理制度
- 圆明园内部管理制度
- 外资公司内部律师制度
- 奇瑞汽车内部岗级制度
- 如何设计内部控制制度
- 2026年室内装修水电合同(1篇)
- GB/T 24015-2026环境管理环境尽职调查评估指南
- 康复医学XX康复康复医学实习生实习报告
- 2026广东江门市新会银湖产业投资集团有限公司招聘15人考试参考试题及答案解析
- 2026年九江职业大学单招职业技能测试题库附参考答案详解(达标题)
- 中国地质调查局局属单位2026年度公开招聘工作人员(第一批)【714人】考试参考题库及答案解析
- 医疗设备维修与售后服务规范
- 水土保持工程调查与勘测标准
- 2025至2030中国抗乙肝病毒药行业市场规模及投资机会分析报告
- 2025年通信基站安全管理与应急处理规范
- 村务监督委员会培训课件
评论
0/150
提交评论