C语言课程设计学生信息管理系统设计.docx
《C语言课程设计学生信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统设计.docx(18页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生信息管理系统设计
课程设计说明书
2012年6月19号
题目:
学生信息管理系统
课程名称:
C语言课程设计
院(系、部、中心):
新能源与动力工程学院
班级:
电力工程与管理
目录
一、课程设计任务-------------------1
二、系统设计方案-------------------1
三、数据结构描述与定义-------------2
四、程序主要代码分析---------------2
五、测试结果与分析------------------10
六、课程设计总结--------------------10
评分
一、课程设计任务
(一)前言
本课程是继《高级语言程序设计(C)》课程之后,训练学生综合运用本课程知识,结合实际系统运用C语言进行系统设计以及调试,加深对本课程的理解,提高学生综合运用知识的能力、分析问题、解决问题的能力和利用C语言进行综合系统设计的实践技能。
学C语言程序设计已有一学期了,对C语言的基本概念和常用算法也有了一定的了解,平时虽然也做过一些练习,也看了不少程序从而掌握了一定的语法知识和编程经验。
但是对于有些功能强大的软件还是没有尝试过能否编的起来。
所以决定在所学知识的基础上,再加以拓展,利用三天时间编个主题明确,具有一定使用价值的中小程序以提高自身的编程水平与上级调试技能。
(二)课程设计题目及要求
学生信息管理系统设计:
学生信息包括:
学号、姓名、年龄、性别、出生年月、地址、电话、E-mail等。
试设计学生信息管理系统,使之能提供以功能:
系统以菜单方式工作
学生信息录入功能(学生信息用文件保存)——输入
学生信息浏览功能——输出
查询、排序功能——算法
按学号查询、按姓名查询
学生信息的删除与修改
二、系统设计方案
(一)总体框架图:
学生管理系统
推出信息系统
增加学生信息
浏览学生信息
查询学生信息
修改学生信息
(二)模块设计
模块一:
头文件,变量定义,函数声明
对系统所是用的变量进行定义、对函数进行声明
模块二:
学生信息系统使用帮助
声明函数voidhelp(),对整个系统进行使用说明
模块三:
录入学生信息
声明函数voidreadfile(),说明一个文件指针FILE*ftp打开文件〝student.txt〞
模块四:
学生信息的修改
声明voidseek()为查找函数,通过switch(item)设定用学号查找,用姓名查找两个分支
模块五:
学生信息的修改
声明voidmodify()为学生信息修改函数,通过seitch(item)设定所要修改的项目
模块六:
学生信息按学号排序
声明voidsort()将录入学生系统按升序排列,用的是“冒泡排序法”实现排序
模块七:
增加学生信息
声明voidinsert()插入学生信息,先通过判断学生是否存在,若否则继续输入,若是跳出,重新循环
模块八:
删除学生信息
声明voiddel()实现学生信息删除,通过学号对比确定要删除的信息,然后用后一个替换掉。
模块九:
显示学生信息
通过display()函数输出学生信息
模块十:
保存信息
通过fp=fopen(student.txt.w):
写入信息
模块十一:
界面菜单
通过switch(num)调用以上各函数,实现功能
三、数据结构描述与定义
(一)结构体
“结构体名”用作类型的,他又称“结构体标志”。
声明一个结构体类型的一般形式为:
Struct结构体
(成员表列):
大括号内是该结构体中的各个成员,由他们组成一个结构体,对个成员应进行类型声明,即
类型名,成员名
也可以把“成员表列”改为“域表”。
每一个成员也称为结构体中的一个域。
成员名归为变量名同。
(二)结构体数组:
一个结构体变量中可以存放一组数据(如本程序中一个学生的学号、姓名、成绩等)。
因为程序中需存放着若干个学生的信息,这些数据需参加运算,就得运算数组即结构体数组,结构体数组的每个数组元素都是一个结构体类型的数组,他们分别包括各个成员(分量)项。
四、程序主要代码分析
#include"stdio.h"
#include"conio.h"
#include"string.h"
#include"stdlib.h"
voidlook();/*声明查看函数*/
voidsave();/*声明保存函数*/
voidsearch_name();/*声明按姓名查看函数*/
voidsearch_number();/*声明按学号查看函数*/
voidorder();/*声明排序函数*/
voiddel();/*声明删除函数*/
intopenl();/*声明打开函数*/
voidwelcome();/*声明我的个人信息函数*/
voidtype();/*声明输入函数*/
voidsee();/*声明打开并查看文件函数*/
structstudent/*定义学生信息的结构体类型*/
{
charnum[15];/*学号*/
charname[20];/*姓名*/
charsex[4];/*性别*/
intenglish;/*英语成绩*/
intmath;/*数学成绩*/
intchinese;/*语文成绩*/
floataver;/*平均成绩*/
floatsum;/*总成绩*/
}stu[100];
intn;/*声明一个全局变量*/
voidmain()/*主函数即用户的操作界面*/
{
system("color1E");/*设计文本颜色*/
intb,flag=0;/*声明局部变量*/
while
(1)/*循环输出以下信息*/
{
printf("\n\t\t\t欢迎来到学生成绩管理系统!
\n");
printf("\n\t\t\t\t###制作\n");
printf("\t\t\t-------------------------------\n");
printf("\t\t\t1.键入学生的信息\n\n");/*键入学生的信息*/
printf("\t\t\t2.查看录入的学生信息\n\n");/*查看录入的学生信息*/
printf("\t\t\t3.按姓名查看学生的信息\n\n");/*按姓名查看学生的信息*/
printf("\t\t\t4.按学号查看学生的信息\n\n");/*按学号查看学生的信息*/
printf("\t\t\t5.按平均成绩排序\n\n");/*排序*/
printf("\t\t\t6.删除学生信息\n\n");/*删除学生信息*/
printf("\t\t\t7.保存学生信息\n\n");/*保存*/
printf("\t\t\t8.打开文件\n\n");/*打开文件*/
printf("\t\t\t9.我的个人信息\n\n");/*我的个人信息*/
printf("\t\t\t0.退出\n\n");/*退出*/
printf("\t\t\t请输入你的选择:
");
scanf("%d",&b);
switch(b)
{
case1:
type();break;/*调用键入学生信息函数*/
case2:
look();break;/*调用查看函数*/
case3:
search_name();break;/*调用姓名查看函数*/
case4:
search_number();break;/*调用学号查看函数*/
case5:
order();break;/*调用排序函数*/
case6:
del();break;/*调用删除函数*/
case7:
save();break;/*调用保存函数*/
case8:
see();break;/*调用打开文件函数*/
case9:
welcome();break;/*调用我的个人信息函数*/
case0:
flag=1;break;/*退出SWITCH语句*/
default:
printf("错误!
");
}
if(flag)break;/*如果选择0就退出循环*/
}
}
voidwelcome()/*我的个人信息函数*/
{
system("CLS");
printf("\n\n\t\t------------个人信息------------");/*在屏幕上输出一下信息*/
printf("\n\n\n\n\t\t姓名:
###");
printf("\t\t\tSex:
#\n");
printf("\t\t年龄:
#\n");
printf("\n\t\t\t--------学习经历--------\n\n\n");
printf("\t\t小学:
######\n\n");
printf("\t\t初中:
#####\n\n");
printf("\t\tS高中:
######\n\n");
printf("\t\t大学:
洛阳理工学院\n\n");
printf("\n\n\t\t按任意键返回欢迎屏幕!
");
getch();/*按任意键返回主函数*/
}
voidtype()/*定义键入学生信息函数*/
{
system("CLS");
inti;/*定义局部变量*/
printf("\t\t输出你想输入的学生信息个数:
");
scanf("%d",&n);
for(i=0;i{
printf("\n\t\t\t----------------\n");
printf("\t\t\t学号:
");
scanf("%s",&stu[i].num);/*输入学号*/
printf("\t\t\t姓名:
");
scanf("%s",&stu[i].name);/*输入姓名*/
printf("\t\t\t性别:
");
scanf("%S",&stu[i].sex);/*输入性别*/
printf("\t\t\t英语:
");
scanf("%d",&stu[i].english);/*输入英语成绩*/
printf("\t\t\t数学:
");
scanf("%d",&stu[i].math);/*输入数学成绩*/
printf("\t\t\t语文:
");
scanf("%d",&stu[i].chinese);/*输入语文成绩*/
stu[i].aver=((float)stu[i].english+(float)stu[i].math+(float)stu[i].chinese)/3;/*计算平均成绩*/
stu[i].sum=(float)stu[i].english+(float)stu[i].math+(float)stu[i].chinese;/*计算总成绩*/
printf("\t\t\t平均成绩=%4.1f\n",stu[i].aver);/*输出平均成绩*/
printf("\t\t\t总成绩=%4.1f\n",stu[i].sum);/*输出总成绩*/
}
printf("\n\n\t\t\t按任意键返回菜单!
!
");
getch();
save();
}
voidsave()/*建立保存文件函数*/
{
system("CLS");
FILE*fp;/*定义文件型指针*/
inti;
if((fp=fopen("student.txt","wb"))==NULL)/*打开输出文件*/
{
printf("不能打开文件!
\n");
return;/*终止程序*/
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,fp)!
=1)
printf("文件写入错误\n");
fclose(fp);/*关闭文件*/
printf("\n\n\n\n\t\t\t学生信息保存成功!
\n");
printf("\n\n\n\n\t\t\t按任意键返回菜单!
!
");
getch();
}
voidlook()/*定义查看函数*/
{
system("CLS");
inti;
//n=openl();/*调用openl函数*/
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
}
printf("\n\n\n\t\t\t按任意键返回菜单");
getch();
}
voidsearch_name()/*按姓名查看函数*/
{
system("CLS");
inti;
charname[20];/*声明字符数组*/
printf("\t\t\t请输入学生姓名:
\n");
scanf("%s",name);
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;iif(strcmp(stu[i].name,name)==0)/*将输入的姓名与结构体中的姓名进行比较*/
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
printf("\n\n\n\t\t\t按任意键返回菜单");
}
getch();
}
voidsearch_number()/*定义按学号查看函数*/
{
system("CLS");
inti;
charnumber[15];/*声明字符数组*/
printf("\t\t\t请输入学号:
\n");
scanf("%s",number);
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;iif(strcmp(stu[i].num,number)==0)/*将输入的学号与结构体中的学号进行比较*/
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
printf("\n\n\n\t\t\t按任意键返回菜单");
getch();
}
voidorder()/*定义排序函数*/
{
system("CLS");
inti,j;
chara;
structstudenttemp;/*声明结构体变量*/
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i{
for(j=i+1;jif(stu[i].sum{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
}
getch();
printf("是否保存?
(yorn)");
getchar();
scanf("%c",&a);
if(a=='y')/*是否保存排序后的文件*/
save();
else
printf("退出");
getch();
}
voiddel()/*定义删除学生信息函数*/
{
inti;
chara;
charname[20];
system("CLS");
printf("\t\t\t输入学生名字:
\n");
scanf("%s",name);
system("CLS");
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;iif(strcmp(stu[i].name,name)==0)
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
getch();
printf("真的删除?
(yorn)");
getchar();
scanf("%c",&a);
if(a=='y')/*是否删除该信息*/
{
for(;istu[i]=stu[i+1];
n=n-1;
printf("你已经删除信息");
}
else
printf("退出");
getch();
}
save();
}
intopenl()/*定义打开文件函数*/
{
system("CLS");
inti;
FILE*fp;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("Cannotopenfile.\n");
exit(0);
}
for(i=0;!
feof(fp);i++)
fread(&stu[i],sizeof(structstudent),1,fp);
fclose(fp);
return(i-1);
}
voidsee()/*打开并查看文件*/
{
system("CLS");
inti;
n=openl();
printf("文件打开成功!
\n");
printf("按任意键查看!
\n");
getch();
printf("\t学号\t姓名\t性别\t英语\t数学\t语文\t平均成绩\t总成绩\n");
for(i=0;i{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
}
printf("\n\n\n\t\t\t按任意键返回菜单");
getch();
}
五、测试结果与分析
六、课程设计总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。
因此作为二十一世纪的大学来说掌握计算机开发技术十分重要的。
我的题目是文章处理系统的设计,对于我们这些新手来说,这是很大的考验,我一千次一万次的问自己,怎么才能找到课堂所学与实际应用的最佳结合点?
怎么才能让自己的程序在篇幅上简单,在使用价值上丰富?
怎样让自己的业余更靠近专业?
怎样让自己的计划更具有序性,而不会忙无一用?
机会是老师,学校,以及无数教育工作者给的,而能力是自己的,耐性是需要的。
经过自己的琢磨,听取了师姐,师兄们的建议,还查阅了很多书籍,才做到了心中有数,才了解了C语言课程设计的真正用意——培养自学能力,养成程序编辑的好习惯。
我从来不相信车到山前必有路的说法,认为那只是懒惰者自寻懒惰的借口,我要积极,要把握,要努力。
回顾起此次课程设计,至今我仍感慨颇多,的确,从从拿到题目到完成整个编程,从理论到实践,在整整半个学期的日子里,可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体……通过这次课程设计之后,一定把以前所学过的知识重新温故。
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在胡老师的指导下,终于游逆而解。
同时,在郭老师的身上我学得到很多实用的知识,在次我表示感谢!
同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢。
在课程设计过程中,我学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,黑夜过去了,我们收获的是黎明。
在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键