C语言课程设计学生信息管理系统方案Word文件下载.docx
《C语言课程设计学生信息管理系统方案Word文件下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计学生信息管理系统方案Word文件下载.docx(19页珍藏版)》请在冰豆网上搜索。
(5)Query查询函数:
首先使用switch语句生成菜单,实现操作选择功能。
分三个部分按学号查询、按查询和取消返回上一层。
按学号查询时调用while语句对学号检索,再调用if语句进行判断,最后输出想要查询的信息。
按查询的方法跟按学号查询的一样。
(6)Del删除函数:
使用while语句进行检索,直接删除学生信息。
(7)Change修改函数:
建立devise函数,生成菜单,用switch语句进行分叉选择功能,选择项目进行相应的信息输入。
在Change函数中使用while语句进行检索后再调用devise函数修改信息。
实现学生信息修改。
四、调试与测试
1、进行多次运行,发现那栏的一打长就会显示一样的数字,打短的数字就可以。
我们原本是使用长整型来定义,想说空间不够,后来改用字符型,用字符串记录程序运行结果正确。
2、程序设计初就在考虑退出与返回有什么差别,如果返回了主菜单那退出用什么,关于这个问题看了许多网上的资料,发现许多程序都有exit(0)的函数,所以去查了不少关于exit的函数容,最后退出就用了exit(0),但是又提醒说要编写exit函数,之后发现要加入<
stdlib.h>
的头文件,程序可以正常运行。
3、程序在180行显示说readData函数不可以返回值,所以在if条件句中将return0删除了,不过这个程序在学校的机房即使不删return0也是可以运行的,关于这点很是不解,还有待解决。
五、测试结果
1、进入系统界面,输入密码,超过三次会自动退出。
2、选1时录入学生信息,编辑完后会继续显示菜单
3、选2浏览学生信息,之后继续返回菜单界面,为节省空间菜单界面暂不截图
4、选择3查询学生信息会有按学号与按查询。
下图是先按学号查询的截图。
5、按查询时,如果查无此人会显示“没有该学生信息,请核对。
”之后返回上一层,按查询。
显示学生信息后可以选择取消返回主菜单。
6、选择4删除学生,输入学号删除学生的信息。
之后会返回主菜单
7选择5修改学生信息,按学号输入,之后按显示输入即可。
用几组测试数据进行测试算法设计的正确性。
(附上程序运行的截图)
六、用户手册
1程序一开始会显示欢迎界面,按要求输入密码,3次错误会退出程序。
2密码正确后会显示主菜单,按要求输入您的需求。
七、附录
源程序清单和结果:
源程序要加注释。
结果要包括测试数据和运行结果。
/*Note:
YourchoiceisCIDE*/
#include<
stdio.h>
malloc.h>
string.h>
io.h>
#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"
);
\n请输入您的密码:
"
scanf("
%s"
userPWD);
if(strcmp(userPWD,"
123"
)==0)
{//密码正确,显示主菜单
mainmenu();
break;
}
else
{if(i<
2)
{//用户名或密码错误,提示用户重新输入
printf("
密码错误,请重新输入!
else{//连续3次输错用户名或密码,退出系统。
您已连续3次将密码输错,系统将退出!
}}}
return0;
}//显示欢迎信息
voidwelcome(){
+~~~~~~~~~~~~~~~~~~~~~~~~~~~+\n"
||\n"
|欢迎使用学生信息管理系统|\n"
}//系统主菜单
voidmainmenu(){intchoice;
choice=-1;
readData();
\n温馨提示:
为保证您的操作得到保存,请按正常顺序退出系统^_^\n"
do
{printf("
\n\n\n"
\t\t\t--------------------------------\n"
\t\t\t+学生信息管理系统|\n"
\t\t\t+1----录入学生信息|\n"
\t\t\t+2----浏览学生信息|\n"
\t\t\t+3----查询学生信息|\n"
\t\t\t+4----删除学生信息|\n"
\t\t\t+5----修改学生信息|\n"
\t\t\t+0----退出系统|\n"
请输入您的选择:
scanf("
%d"
&
choice);
switch(choice){
case0:
writeData();
freeAll();
exit(0);
case1:
record();
case2:
displayAll();
case3:
query();
case4:
del();
case5:
change();
default:
\n无效选项!
}}
while(choice!
=0);
}//录入学生信息
voidrecord(){structstudent*p0;
p0=(structstudent*)malloc(LEN);
请输入学生的学号:
%ld"
&
p0->
num);
请输入学生的:
p0->
name);
请输入学生的年龄:
age);
请输入学生的性别:
sex);
请输入学生的出生年月:
birthday);
请输入学生的地址:
address);
tele_num);
请输入学生的E-mail:
E_mail);
insert(p0);
该学生的信息为:
\n"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^"
学号\t\t年龄\t性别\t出生年月\t\t地址\t\tE-mail\n"
display(p0);
}
voidinsert(structstudent*stu)//根据学号对学生进行排序//
{
structstudent*p0,*p1,*p2;
p1=head;
p0=stu;
if(head==NULL){head=p0;
p0->
next=NULL;
}
else{while((p0->
num>
p1->
num)&
&
(p1->
next!
=NULL))
{p2=p1;
p1=p1->
next;
if(p0->
num<
=p1->
num){if(head==p1)head=p0;
elsep2->
next=p0;
p0->
next=p1;
else{p1->
TOTAL_NUM++;
voiddisplay(structstudent*p){
%ld\t%s\t%d\t%s\t%s\t%s\t%s\t%s\n"
p->
num,p->
name,p->
age,p->
sex,p->
birthday,p->
address,p->
tele_num,p->
}//浏览学生信息
voiddisplayAll(){
structstudent*p;
学生总数:
%d\n"
TOTAL_NUM);
p=head;
if(head!
=NULL){
\n学号\t\t年龄\t性别\t出生年月\t地址\t\tE-mail\n"
do{display(p);
p=p->
}while(p!
=NULL);
}printf("
}//查询学生信息
voidquery(){intchoice;
do{printf("
+--------------------+\n"
|按学号查询请按1|\n"
|按查询请按2|\n"
|取消请按0|\n"
switch(choice){case0:
return;
case1:
query_by_num();
break;
case2:
query_by_name();
default:
}//按学号查询学生信息
voidquery_by_num(){
intnum;
structstudent*p1;
请输入学生的学号:
if(head==NULL){printf("
无学生记录!
p1=head;
while(num!
=p1->
num&
next!
=NULL)p1=p1->
if(num==p1->
num){
display(p1);
}elseprintf("
没有该学生记录,请核对!
}//按查询学生信息
voidquery_by_name(){charname[20];
请输入学生的:
name);
}p1=head;
while(strcmp(name,p1->
name)&
if(!
strcmp(name,p1->
name)){
elseprintf("
}//写入文件
voidwriteData(){FILE*fp;
//文件指针
fp=fopen(FILE_DATA_PATH,"
w"
if(!
fp){printf("
文件打开错误!
fprintf(fp,"
for(p=head;
p!
=NULL;
p=p->
next){
fprintf(fp,"
p->
fclose(fp);
voidfreeAll(){
structstudent*p1,*p2;
p1=p2=head;
while(p1){p2=p1->
free(p1);
p1=p2;
}}//读取文件
voidreadData(){FILE*fp;
r"
fscanf(fp,"
TOTAL_NUM);
head=p1=p2=(structstudent*)malloc(LEN);
p1->
num,p1->
name,&
age,p1->
sex,p1->
birthday,p1->
address,&
tele_num,p1->
while(!
feof(fp))
{p1=(structstudent*)malloc(LEN);
fscanf(fp,"
p2->
p2=p1;
}//删除学生信息
voiddel(){structstudent*p1,*p2;
longintnum;
if(head==NULL)
请输入您要删除的学生的学号:
while(num!
=NULL)
{p2=p1;
p1=p1->
if(num==p1->
num)
{if(p1==head)
head=p1->
elsep2->
next=p1->
free(p1);
TOTAL_NUM--;
}
}//修改学生信息
voidchange(){structstudent*p1,*p2;
return;
请输入您要修改的学生的学号:
p1=p1->
num)devise(p1);
voiddevise(structstudent*p)
{intchoice;
choice=-1;
请选择您要修改的学生的信息容:
+----------------------+\n"
|请按1|\n"
|年龄请按2|\n"
|性别请按3|\n"
|出生年月请按4|\n"
|地址请按5|\n"
|请按6|\n"
|E-mail请按7|\n"
请输入新:
请输入新年龄:
p->
case3:
请输入新性别:
case4:
请输入新出生年月:
case5:
请输入新地址:
case6:
case7:
请输入新E-mail: