C语言课程设计学生信息管理系统.docx
《C语言课程设计学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
C语言课程设计学生信息管理系统
c语言及数据结构与算法课程设计
题目:
学生信息管理系统
专业:
姓名:
学号:
同组其他学生(学号):
2013年月日
一、需求分析.3
二、总体设计.4
三、详细设计.5
四、调试与测试.6
五、测试结果.7
六、用户手册.9
七、附录.9
一、需求分析
每年九月份都有大量新生来到学校报道,使学校管理学生工作量增大,为此我们设计一学生信息管理系统,学生信息包括:
学号,姓名,年龄,性别,出生年月,地址,,E-mail等。
使之能提供以下功能:
(1)系统以菜单方式工作
(2)学生信息录入功能---输入
(3)学生信息浏览功能---输出
(4)查询、排序功能---算法按学号查询、按姓名查询、学生信息的删除
与修改(可选项)
二、总体设计
组成框图
主菜单欢迎界面录入
按姓名
流程图
开始
密码是否正确
重新输入
Y
主菜单
3查询学生信息
退出结束
录入
开始
申请新空间
浏览
开始
输入各项数据
指针p指向头结点
输出指针的数据P=p->next
显示数据
结束
N
P==NULL?
结束
查询
修改&删除
输入姓名或学号
输入要删除或修改的学号
P指针的学号与
姓名是否与输N入的相同?
P=p->next
P指针的学号
与输入的是否N相同
结束
输出数据
结束
三、详细设计
主函数通过在while循环结构中嵌入switch分支结构实现操作选择功能。
(1)Record录入函数
建立一个包含学生全部信息的结构体,申请空间,其指针为p0,存入学生各项
对应的数据。
(2)Insert插入函数:
按输入的数据存储在一个stu类型的指针里,若原来链表里没有元素,则将此作为第一个元素;若原来的链表里有元素,则将指向头结点指针存储的学号与头指针下一个的学号大小进行比较,小的在前大的在后,之后指向头结点处的指正后
移,进行比较,直到尾结点为止在进行比较的while函数,每比较一次,计算总人数的TOTAL_NU自M加。
(3)Display浏览函数:
将传给Display函数的指针P所指向的结构体的各项数据输出以便核对信息。
(4)DisplayAll浏览函数:
指针指向链表头结点,在if语句中嵌套do-while语句将学生信息按学号从大到小进行逐一输出。
(5)Query查询函数:
首先使用switch语句生成菜单,实现操作选择功能。
分三个部分按学号查询、按姓名查询和取消返回上一层。
按学号查询时调用while语句对学号检索,再调用if语句进行判断,最后输出想要查询的信息。
按姓名查询的方法跟按学号查询的一样。
(6)Del删除函数:
使用while语句进行检索,直接删除学生信息。
(7)Change修改函数:
建立devise函数,生成菜单,用switch语句进行分叉选择功能,选择项目进行相应的信息输入。
在Change函数中使用while语句进行检索后再调用devise函数修改信息。
实现学生信息修改。
四、调试与测试
1、进行多次运行,发现那栏的一打长就会显示一样的数字,打短的数字就可以。
我们原本是使用长整型来定义,想说空间不够,后来改用字符型,用字符串记录
程序运行结果正确
2、程序设计初就在考虑退出与返回有什么差别,如果返回了主菜单那退出用什么,关于这个问题看了许多网上的资料,发现许多程序都有exit(0)的函数,所以去查了不少关于exit的函数容,最后退出就用了exit(0),但是又提醒说要编写exit函数,之后发现要加入的头文件,程序可以正常运行。
3、程序在180行显示说readData函数不可以返回值,所以在if条件句中将return0删除了,不过这个程序在学校的机房即使不删return0也是可以运行的,关于这点很是不解,还有待解决。
五、测试结果
1、进入系统界面,输入密码,超过三次会自动退出。
2、选1时录入学生信息,编辑完后会继续显示菜单
3、选2浏览学生信息,之后继续返回菜单界面,为节省空间菜单界面暂不截图
4、选择3查询学生信息会有按学号与按姓名查询。
下图是先按学号查询的截图。
5、按姓名查询时,如果查无此人会显示“没有该学生信息,请核对。
”之后返回上一层,按姓名查询。
显示学生信息后可以选择取消返回主菜单。
6、选择4删除学生,输入学号删除学生的信息。
之后会返回主菜单
7选择5修改学生信息,按学号输入,之后按显示输入即可。
用几组测试数据进行测试算法设计的正确性。
(附上程序运行的截图)
六、用户手册
1程序一开始会显示欢迎界面,按要求输入密码,3次错误会退出程序
2密码正确后会显示主菜单,按要求输入您的需求。
七、附录
源程序清单和结果:
源程序要加注释。
结果要包括测试数据和运行结果。
/*Note:
YourchoiceisCIDE*/
#include
#include
#include
#include
#include#defineNULL0
#defineLENsizeof(structstudent)#defineFILE_DATA_PATH"c:
\student.txt"structstudent
{longintnum;
charname[20];
intage;
charsex[4];
charbirthday[10];
charaddress[30];
chartele_num[13];
charE_mail[20];
structstudent*next;};
intTOTAL_NUM=0;
structstudent*head=NULL;
voidwelcome();
voidmainmenu();
voidrecord();
voidinsert(structstudent*stu);voiddisplay(structstudent*stu);voiddisplayAll();voidquery();
voidquery_by_num();voidquery_by_name();
voidreadData();
voidwriteData();
voidfreeAll();
voiddel();
voidchange();
voiddevise(structstudent*p);intmain(){
charuserPWD[7];inti;welcome();
for(i=0;i
<3;i++){
printf(
"\n密码为123\n");
printf(
"\n请输入您的密码:
");
scanf(
"%s",userPWD);
if
(strcmp(userPWD,"123")==0)
{
//密码正确,显示主菜单
mainmenu();break;}
else
{if(i<2)
{//用户名或密码错误,提示用户重新输入printf("密码错误,请重新输入!
");}
else{//连续3次输错用户名或密
码,退出系统
printf(
"您已连续3次将密码输错,系统将退出!
");
}}
return0;}//显示欢迎信息
voidwelcome(){
printf("+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n);"
printf("|
|\n"
);
printf("|欢迎使用学生信息管理系统|\n");
printf("|
|\n"
);
printf("+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n);"}//系统主菜单
voidmainmenu(){intchoice;choice
=-1;
readData();
温馨提示:
为保证您的操作得到保存,请按正常顺序退出系统
^_^\n");
do
{
printf(
"\n\n\n"
);
printf(
"\t\t\t
\n"
printf(
"\t\t\t+
学生信息管理系统
|\n"
printf(
"\t\t\t
\n"
printf(
"\t\t\t+
1
录入学生信息
|\n"
printf(
"\t\t\t+
2
浏览学生信息
|\n"
printf(
"\t\t\t+
3
查询学生信息
|\n"
printf("\n
);
);
);
);
);
);
printf("\t\t\t+4
删除学生信息
|\n"
);
printf("\t\t\t+5修改学生信息|\n");
printf("\t\t\t+0退出系统|\n");
printf("\t\t\t\n");
printf("请输入您的选择:
");
scanf("%d",&choice);
switch(choice){
case0:
writeData();freeAll();
exit(0);
case1:
record();break;
case2:
displayAll();
break;
case3:
query();
break;
case4:
del();
break;
case5:
change();
break;
default
:
printf(
"\n无效选项!
"
);
break;
}
}
while(choice!
=0);}//录入学生信息
p0=(structstudent*)malloc(LEN);
printf("请输入学生的学号:
");
scanf("%ld",&p0->num);
scanf(
"%s",p0->name);
printf(
"请输入学生的年龄:
");
scanf(
"%d",&p0->age);
printf(
"请输入学生的性别:
");
scanf(
"%s",p0->sex);
printf(
"请输入学生的出生年月:
");
scanf(
"%s",p0->birthday);
printf(
"请输入学生的地址:
");
scanf(
"%s",p0->address);
printf(
"请输入学生的:
");
scanf(
"%s",p0->tele_num);
prin