C语言课程设计报告学生信息管理系统.docx
《C语言课程设计报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告学生信息管理系统.docx(25页珍藏版)》请在冰点文库上搜索。
C语言课程设计报告学生信息管理系统
C语言程序设计
课程设计报告
设计题目:
学生信息管理系统
专业电子信息工程
班级
学生
指导教师
年学期
设计任务:
C语言课程设计任务书及指导书5
题目:
学生信息管理系统
功能:
学生信息管理系统,每个学生信息作为一条记录,包括学号、姓名、性别、出生年月、专业、班级、家庭地址、宿舍号码等。
系统要求实现以下功能:
1、输入功能:
录入学生信息(包括学号、姓名、出生年月、专业等);
2、显示功能:
完成学生记录的显示;
3、查找功能:
完成按姓名或姓名查找学生的相关记录,并显示。
要求:
1、用C语言实现程序设计;
2、利用结构体数组实现学生信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
报告撰写要求:
1.报告内容不能雷同。
2.字体工整,版面整洁,图表规范,格式分明。
3.流程图用钢笔或油性笔画,不能使用铅笔。
4.如不满足以上要求中的任意一条,发回重写;严重者,给予不及格。
第一部分(20%)
第二部分(20%)
第三部分(30%)
第四部分(30%)
报告成绩:
指导教师:
预习报告(20%):
平时成绩(10%):
验收答辩成绩(50%):
设计报告成绩(20%):
总评成绩:
一、总体设计
<一>.模块划分
总体分为4大板块,分别为:
1、输入信息模块:
输入信息并将信息保存到文件当中:
2、浏览信息模块:
显示需要全部的学生信息:
3、编辑信息模块:
输入密码,修改或删除学生信息:
4、修改密码模块:
修改系统密码;
5、系统初始化模块:
删除保存的数据和修改后的密码,初始化系统。
<二>.数据结构
#defineN100/*所能容纳的数据数量*/
structstudent
{
intnumber;
charname[10];
chargender[6];
intbirthday;
charmajor[18];
charClass[10];
charaddress[30];
chardormitory[10];
}stu[N];
<三>.函数原型声明
1、intmenu1();主菜单输出函数
2、intmenu2();浏览选项子菜单输出函数
3、intmenu3();编辑选项子菜单输出函数
4、voidinput();信息输入函数
5、voidscan();浏览学生信息子函数
6、voiddisplay();信息显示函数
7、voidsave(intn);将输入的信息保存为文件
8、voidedit();编辑学生信息子函数
9、voidsearch(ints);查找函数
10、voidrevise_info();信息修改函数
11、voidcode();密码管理函数
12、voiddel();信息删除函数
13、voidrecover();初始化程序
二、功能实现
1.main()(流程图)
2.
input()
display()
menu2()
scan()
search()
menu1()
revise_info()
edit()
menu3()
del()
code()
2.各功能模块详细流程图
(1)、输入信息模块
输入人数——输入信息——保存信息至文件
(2)、浏览信息模块
①、全部显示:
从文件中读取信息至结构体——输出信息
②、按姓名查找:
输入姓名——从文件中读取信息至结构体——查找姓名——输出信息
③、按学号查找:
输入学号——从文件中读取信息至结构体——查找学号——输出信息
(3)、编辑信息模块
①、修改信息:
输入学号——从文件中读取信息至结构体——查找学号——选择修改项目——修改信息——保存信息至文件
②、删除信息:
输入学号——从文件中读取信息至结构体——查找学号——确认删除——删除信息——保存剩余信息至文件
(4)、修改密码模块
从文件中读取旧密码——输入旧密码——输入新密码——保存至文件——修改成功
(5)、系统初始化模块
删除原文件——建立空白文件
三、测试及调试(测试方案、存在的问题及解决方法)
1、主菜单与子菜单无法建立联系,即输入相应的选项后不能运行相应的子函数。
分析与解决:
函数的结构出现了一些问题,最终在老师的帮助下得以解决。
2、保存数据时无法调用文件(“软件提示:
cannotopenDebug/学生管理系统.exeforwriting”)。
分析与解决:
原以为是程序某个地方有错误,于是检查了好长时间的程序,还向QQ群好友进行了求助。
最终在网上查到的答案的提醒下,删除了“学生管理系统.exe”程序并重新进行了编译,问题因此得以解决。
3、用feof()函数判断文件中信息是否读取完毕时导致输出的信息总是比实际信息多一组
分析与解决:
在网上搜素该函数的具体用法后,才发现这是这个函数的弊端所在,读到文件中信息的最后,还要多执行一次循环。
最终,我采用了先读出文件中信息的组数,然后在得到的组数的基础上减1的方法从头输出信息。
4、编写密码管理子函数时,每次启动程序时密码都会初始化
分析与解决:
采用了文件的方法,将密码保存在文件中。
5、显示信息时出现乱码
分析与解决:
该错误是由于给字符数组赋值时使用了“&”的同时使用了数组名进行赋值,二者发生了冲突导致。
在王栋老师的指导下,删除了赋值符号“&”,问题得以解决。
6、运行程序的时候,只有本次存进去的信息才能实现查找功能
分析与解决:
该错误是由于每次运行程序的时候没有将以前存在文件中的信息读取到内存当中导致。
四、总结
1、对C语言知识掌握程度得到了很大的提高,对C语言的编程实践有了比较深刻的认识。
2、在遇到程序调试不通过时,学会通过缩小范围的分析来锁定问题所在。
3、通过这次实验,熟悉了从自然语言转换成伪代码再转换为流程图的过程。
4、在程序中设定合适的全局变量,可以简化程序的编写难度。
5、运用函数可以减少编写时的代码量,也使程序条理清晰。
6、通过本次C语言上机实验,我对这个介于人类与非人类之间的计算机编程语言有了一定的体验。
随着实验的成功与报告的完成,有点微微的成就感使人难忘。
伴随着学习的深入,我发现高深的东西还有很多很多,等待着我自己去挖掘。
对C语言的学习,我会加倍努力。
附件:
源程序代码
/***************************学生管理系统***************************/
#include
#include/*控制台输入输出库函数*/
#include
#include
intmenu1();/*主菜单输出函数*/
intmenu2();/*浏览选项子菜单输出函数*/
intmenu3();/*编辑选项子菜单输出函数*/
voidinput();/*信息输入函数*/
voidscan();/*浏览学生信息子函数*/
voiddisplay();/*信息显示函数*/
voidsave(intn);/*将输入的信息保存为文件*/
voidedit();/*编辑学生信息子函数*/
voidsearch(ints);/*查找函数*/
voidrevise_info();/*信息修改函数*/
voidcode();/*密码管理函数*/
voiddel();/*信息删除函数*/
voidrecover();/*初始化程序*/
#defineN100/*所能容纳的数据数量*/
structstudent/*学生信息结构体*/
{
intnumber;
charname[10];
chargender[6];//性别
intbirthday;
charmajor[18];
charClass[10];
charaddress[30];
chardormitory[10];//宿舍
}stu[N];
inti,n;
inta,b,c;/*传递选项的全局变量*/
intcode0=123456;/*初始密码*/
longlongBytes;/*读取文件长度的变量*/
FILE*fp;/*创建与保存数据的文件student联系的指针变量*/
FILE*co;
/*************************主函数*************************/
voidmain()
{
system("color2e");/*设置文本背景颜色*/
co=fopen("code","ab+");/*判断是否有code文件,如果不存在则建立*/
fseek(co,0,SEEK_SET);
fseek(co,0,SEEK_END);
longBytes=ftell(co);/*获取文件code的长度,以判断文件中是否有数据*/
if(longBytes==0)
fprintf(co,"%d",code0);
fclose(co);
fp=fopen("student","ab+");/*判断是否有student文件,如果不存在则建立*/
fclose(fp);
while
(1)
{
a=menu1();/*引入主菜单*/
switch(a)
{
case1:
input();break;/*调用信息输入子函数*/
case2:
scan();break;/*调用浏览信息子函数*/
case3:
edit();break;/*调用编辑信息子函数*/
case4:
code();break;/*调用密码管理子函数*/
case5:
recover();break;
case0:
exit
(1);break;/*退出程序*/
default:
system("CLS");
}
}
}
/*********************主菜单输出函数*********************/
intmenu1()
{
intm1;
printf("\n\t\t———————学生管理系统———————");
printf("\n\n\n\t\t\t1、录入学生信息");
printf("\n\n\t\t\t2、浏览学生信息");
printf("\n\n\t\t\t3、编辑已有信息");
printf("\n\n\t\t\t4、修改密码");
printf("\n\n\t\t\t5、系统初始化");
printf("\n\n\t\t\t0、退出系统");
printf("\n\n\n\t\t————————————————————");
printf("\n\n\t\t请输入您的选择:
");
scanf("%d",&m1);/*读取选项值*/
returnm1;/*返回选项值*/
}
/**************************浏览选项子菜单输出函数*************************/
intmenu2()
{
intm2;
printf("\n\t\t———————浏览学生信息———————");
printf("\n\n\n\t\t\t1、显示全部信息");
printf("\n\n\t\t\t2、按姓名查找");
printf("\n\n\t\t\t3、按学号查找");
printf("\n\n\t\t\t4、返回主菜单");
printf("\n\n\t\t\t0、退出系统");
printf("\n\n\n\t\t————————————————————");
printf("\n\n\t\t请输入您的选择:
");
scanf("%d",&m2);/*读取选项值*/
returnm2;/*返回选项值*/
}
/****************************编辑选项子菜单输出函数***********************/
intmenu3()
{
intm3;
printf("\n\t\t———————编辑已有信息———————");
printf("\n\n\n\t\t\t1、修改信息");
printf("\n\n\t\t\t2、删除信息");
printf("\n\n\t\t\t3、返回主菜单");
printf("\n\n\t\t\t0、退出系统");
printf("\n\n\n\t\t————————————————————");
printf("\n\n\t\t请输入您的选择:
");
scanf("%d",&m3);/*读取选项值*/
returnm3;/*返回选项值*/
}
/****************************信息输入函数*************************/
voidinput()
{
system("CLS");/*清屏*/
printf("\n请输入需要录入信息的学生人数:
");
scanf("%d",&n);
system("CLS");/*清屏*/
printf("\n\t\t————————信息录入————————");
for(i=0;i{
printf("\n\n\t\t\t学号:
");
scanf("%d",&stu[i].number);
printf("\n\t\t\t姓名:
");
scanf("%s",stu[i].name);
printf("\n\t\t\t性别:
");
scanf("%s",stu[i].gender);
printf("\n\t\t\t出生年月:
");
scanf("%d",&stu[i].birthday);
printf("\n\t\t\t专业:
");
scanf("%s",stu[i].major);
printf("\n\t\t\t班级:
");
scanf("%s",stu[i].Class);
printf("\n\t\t\t家庭地址:
");
scanf("%s",stu[i].address);
printf("\n\t\t\t宿舍号码:
");
scanf("%s",stu[i].dormitory);
printf("\n\t\t————————————————————");
}
save(n);/*调用保存信息函数*/
printf("\n\t\t数据保存成功!
");
printf("\n\n按任意键返回主菜单!
");
getch();
system("CLS");/*清屏*/
}
/***************************浏览学生信息子函数*************************/
voidscan()
{
system("CLS");/*清屏*/
b=menu2();/*引入浏览子菜单*/
switch(b)
{
case1:
display();break;/*调用显示全部信息子函数*/
case2:
search
(2);break;/*调用按姓名查找信息函数*/
case3:
search(3);break;/*调用按学号查找信息函数*/
case4:
system("CLS");break;/*清屏,返回主菜单*/
case0:
exit
(1);break;/*退出程序*/
default:
system("CLS");
}
}
/****************************编辑学生信息子函数***********************/
voidedit()
{
intm,n;
system("CLS");/*清屏*/
printf("\n请输入密码(初始密码123456):
");
scanf("%d",&m);
co=fopen("code","rb");
fscanf(co,"%d",&n);
fclose(co);
if(m==n)/*验证密码是否正确*/
{
system("CLS");/*清屏*/
c=menu3();/*引入编辑选项子菜单*/
switch(c)
{
case1:
revise_info();break;/*调用修改信息子函数*/
case2:
del();break;/*调用删除信息子函数*/
case3:
system("CLS");break;/*清屏,返回主菜单*/
case0:
exit
(1);break;/*退出程序*/
default:
system("CLS");
}
}
else
{
printf("\n\t密码错误!
");
getch();
system("CLS");/*清屏*/
}
}
/***************************信息保存函数************************/
voidsave(intn)
{
if((fp=fopen("student","ab+"))==NULL)/*打开文件是否失败*/
{
printf("文件student打开失败!
\n");/*显示打开文件失败信息*/
getchar();
exit
(1);/*退出程序*/
}
for(i=0;iif(fwrite(&stu[i],sizeof(structstudent),1,fp)!
=1)
printf("\n保存数据失败!
");
fclose(fp);/*关闭文件*/
}
/****************************信息显示函数*************************/
voiddisplay()
{
system("CLS");/*清屏*/
n=0;
fp=fopen("student","rb");/*打开文件*/
while(!
feof(fp))
{
fread(&stu[n],sizeof(structstudent),1,fp);
n++;
}
fclose(fp);/*关闭文件*/
n=n-1;
for(i=0;i{
printf("\n\t\t————————全部信息————————");
printf("\n\n\t\t\t学号:
%d",stu[i].number);
printf("\n\n\t\t\t姓名:
%s",stu[i].name);
printf("\n\n\t\t\t性别:
%s",stu[i].gender);
printf("\n\n\t\t\t出生年月:
%d",stu[i].birthday);
printf("\n\n\t\t\t专业:
%s",stu[i].major);
printf("\n\n\t\t\t班级:
%s",stu[i].Class);
printf("\n\n\t\t\t家庭地址:
%s",stu[i].address);
printf("\n\n\t\t\t宿舍号码:
%s",stu[i].dormitory);
printf("\n\n\t\t————————————————————");
printf("\n\t\t按任意键继续查看下一组学生信息!
");
getch();
system("cls");
}
printf("\n\t\t全部信息显示完毕!
\n\n按任意键返回主菜单!
");
getch();
system("CLS");/*清屏*/
}
/**********************按姓名、学号查找信息函数***********************/
voidsearch(ints)
{
chars_name[10];
ints_number;
system("CLS");/*清屏*/
if(s==2)/*按姓名查找*/
{
printf("\n请输入需要显示信息的学生的姓名:
");
scanf("%s",s_name);
}
if(s==3)/*按姓名查找*/
{
printf("\n请输入需要显示信息的学生的学号:
");
scanf("%d",&s_number);
}
fp=fopen("student","rb");/*打开文件*/
system("CLS");/*清屏*/
for(i=0;i{
fread(&stu[i],sizeof(structstudent),1,fp);
if(strcmp(s_name,stu[i].name)==0||s_number==stu[i].number)/*输出所查找的信息*/
{
printf("\n\t\t————————信息查找————————");
printf("\n\n\t\t\t学号:
%d",stu[i].number);
printf("\n\n\t\t\t姓名:
%s",st