学生信息管理系统程序.docx
《学生信息管理系统程序.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统程序.docx(41页珍藏版)》请在冰点文库上搜索。
![学生信息管理系统程序.docx](https://file1.bingdoc.com/fileroot1/2023-7/21/328acb51-759b-4611-8c29-ab5d8842159f/328acb51-759b-4611-8c29-ab5d8842159f1.gif)
学生信息管理系统程序
C语言上机实践报告
专 业:
冶金工程
班级:
冶金1102
姓名:
学号:
任课教师:
丽华
时 间:
2012年8月
1、
题目
学生信息管理系统设计
●学生信息包括:
学号,姓名,年龄,性别,出生年月,地址,,E-mail等。
●试设计一学生信息管理系统,使之能提供以下功能:
a)系统以菜单方式工作
b)学生信息录入功能(学生信息用文件保存)---输入
c)学生信息浏览功能---输出
d)查询、排序功能---算法
(1)按学号查询
(2)按姓名查询
e)学生信息的删除与修改(可选项)
1、系统功能模块结构图
2、数据结构设计及用法说明
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
/*定义结构体用作创建链表*/
typedefstructz1
{
charno[11];//学生学号
charname[15];//学生姓名
intage;//学生年龄
charsex;//学生性别
charbirthday[8];//学生出生年月
charaddress[20];//学生住址
chartel[12];//学生联系
chare_mail[20];//学生e-mail
structz1*next;//指向下一链表
}STUDENT;
/*声明用户自定义函数*/
STUDENT*init();
STUDENT*create();
STUDENT*del(STUDENT*h);
STUDENT*insert(STUDENT*h);
STUDENT*revise(STUDENT*h);
voidprint(STUDENT*h);
voidsearch1(STUDENT*h);
voidsearch2(STUDENT*h);
voidsave(STUDENT*h);
intmenu_select();
voidinputs(char*prompt,char*s,intcount);
/*主函数,用于选择功能*/
voidmain()
{
STUDENT*head;
head=init();//初始化链表表头
for(;;)
{
switch(menu_select())
{
case0:
head=init();break;//初始化
case1:
head=create();break;//创建列表
case2:
head=insert(head);break;//插入节点
case3:
save(head);break;//以文件形式保存
case4:
print(head);break;//显示
case5:
search1(head);break;//搜索学号
case6:
search2(head);break;//搜索姓名
case7:
head=del(head);break;//删除
case8:
head=revise(head);break;//修改
case9:
exit(0);//退出程序
}
}
}
/*目录选择函数,返回用户输入的数字*/
intmenu_select()
{
char*menu[]={"************菜单************",
"0.初始化链表",
"1.输入学生信息",
"2.插入学生信息",
"3.保存学生信息",
"4.显示学生信息",
"5.按学号查找学生信息",
"6.按姓名查找学生信息",
"7.删除指定学号的学生信息",
"8.修改指定学号的学生信息",
"9.退出系统"};
intc,i;
for(i=0;i<=11;i++)
printf("%s\n",menu[i]);
do
{
printf("\n请选择0~9中的某一个选项:
\n");
scanf("%d",&c);
}while(c<0||c>10);
returnc;
}
/*初始化函数,作用是返回空指针初始化链表*/
STUDENT*init()
{
returnNULL;
}
/*创建函数,输入学生信息*/
STUDENT*create()
{
STUDENT*h=NULL,*info;
for(;;)
{
info=(STUDENT*)malloc(sizeof(STUDENT));
if(!
info)
{
printf("\n存不足");
returnNULL;
}
inputs("输入学号:
",info->no,11);
if(info->no[0]=='@')break;
inputs("输入姓名:
",info->name,15);
printf("输入年龄:
");
scanf("%d",&info->age);
printf("输入性别编号(0.男1.女):
");
scanf("%s",&info->sex);
printf("输入出生年月(XXXX/XX):
");
scanf("%s",info->birthday);
inputs("输入地址:
",info->address,20);
inputs("输入:
",info->tel,12);
inputs("输入E-mail:
",info->e_mail,20);
info->next=h;
h=info;
}
returnh;
}
/*输入函数,用于判断输入的字符是否超出程序定义避免数据溢出*/
voidinputs(char*prompt,char*s,intcount)
{
charp[255];
do
{
printf(prompt);
scanf("%s",p);
if(strlen(p)>count)
printf("\n太长了!
\n");
}while(strlen(p)>count);
strcpy(s,p);
}
/*插入函数,插入学生成绩*/
STUDENT*insert(STUDENT*h)
{
STUDENT*p,*q,*info;
chars[11];
printf("请输入插入点的学生学号\n");
scanf("%s",s);
printf("\n请输入新的学生信息\n");
info=(STUDENT*)malloc(sizeof(STUDENT));
inputs("输入学号:
",info->no,11);
inputs("输入姓名:
",info->name,15);
printf("输入年龄:
");
scanf("%d",&info->age);
printf("输入性别编号(0.男1.女):
");
scanf("%s",&info->sex);
printf("输入出生年月(XXXX/XX):
");
scanf("%s",info->birthday);
inputs("输入地址:
",info->address,20);
inputs("输入:
",info->tel,12);
inputs("输入E-mail:
",info->e_mail,20);
info->next=NULL;
p=h;
q=h;
while(strcmp(p->no,s)&&p!
=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
if(p==h)
h=info;
else
q->next=info;
elseif(p==h)
{
info->next=p;
h=info;
}
else
{
info->next=p;
q->next=info;
}
printf("\n已经插入了%s这个学生\n",info->name);
return(h);
}
/*保存函数,以文件的形式保存学生信息*/
voidsave(STUDENT*h)
{
FILE*fp;
STUDENT*p;
charoutfile[50];
printf("请输入保存文件的文件名,例如c:
\\f1\\te.txt:
\n");
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL)
{
printf("不能打开文件\n");
exit
(1);
}
printf("\n正在保存......\n");
p=h;
while(p!
=NULL)
{
fwrite(p,sizeof(STUDENT),1,fp);
p=p->next;
}
fclose(fp);
printf("------保存成功!
!
!
------\n");
}
/*显示函数,显示学生信息*/
voidprint(STUDENT*h)
{
inti=0;
STUDENT*p;
p=h;
printf("\n\n\n********************************学生*************************************\n");
printf("|学号|姓名|年龄|性别|出生年月|地址||E-mail|\n");
printf("|--------|--------|----|----|--------|--------------|-----------|-------------|\n");
while(p!
=NULL)
{
i++;
printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p->sex,p->birthday,p->address,p->tel,p->e_mail);
p=p->next;
}
printf("***************************************end*************************************\n");
}
/*搜索函数,按学号搜索学生信息并显示*/
voidsearch1(STUDENT*h)
{
STUDENT*p;
chars[11];
printf("请输入你要查找的同学的学号\n");
scanf("%s",s);
p=h;
while(strcmp(p->no,s)&&p!
=NULL)
p=p->next;
if(p==NULL)
printf("'n没有学号为%s的学生\n",s);
else
{
printf("\n\n\n****************************找到了***************************************\n");
printf("|学号|姓名|年龄|性别|出生年月|地址||E-mail|\n");
printf("|--------|--------|----|----|--------|--------------|-----------|-------------|\n");
printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p->sex,p->birthday,p->address,p->tel,p->e_mail);
printf("***********************************end*****************************************\n");
}
}
/*搜索函数,按姓名搜索学生信息并显示*/
voidsearch2(STUDENT*h)
{
STUDENT*p;
chars[15];
printf("请输入你要查找的同学的姓名\n");
scanf("%s",s);
p=h;
while(strcmp(p->name,s)&&p!
=NULL)
p=p->next;
if(p==NULL)
printf("'n没有姓名为%s的学生\n",s);
else
{
printf("\n\n\n*******************************找到了************************************\n");
printf("|学号|姓名|年龄|性别|出生年月|地址||E-mail|\n");
printf("|--------|--------|----|----|--------|--------------|-----------|-------------|\n");
printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p->sex,p->birthday,p->address,p->tel,p->e_mail);
printf("**************************************end**************************************\n");
}
}
/*删除函数,删除指定学号的学生信息*/
STUDENT*del(STUDENT*h)
{
STUDENT*p,*q;
chars[11];
printf("请输入要删除的学生的学号\n");
scanf("%s",s);
q=p=h;
while(strcmp(p->no,s)&&p!
=NULL)
{
q=p;
p=p->next;
}
if(p==NULL)
printf("\n链表中没有学号为%s的学生\n",s);
else
{
printf("\n\n\n********************************找到了***********************************\n");
printf("|学号|姓名|年龄|性别|出生年月|地址||E-mail|\n");
printf("|--------|--------|----|----|--------|--------------|-----------|-------------|\n");
printf("|%-8s|%-8s|%4d|%4c|%8s|%14s|%11s|%13s|\n",p->no,p->name,p->age,p->sex,p->birthday,p->address,p->tel,p->e_mail);
printf("***************************************end*************************************\n");
printf("请按任意键删除\n");
getchar();
if(p==h)
h=p->next;
else
q->next=p->next;
free(p);
printf("\n已经删除学号为%s的学生\n",s);
}
returnh;
}
/*修改函数,修改指定学号的学生信息*/
STUDENT*revise(STUDENT*h)
{
STUDENT*p,*q;
chars[11];
printf("请输入您希望修改的学生学号\n");
scanf("%s",s);
printf("\n请输入新的学生信息\n");
p=h;
q=h;
while(strcmp(p->no,s)&&p!
=NULL)
{
q=p;
p=p->next;
}
inputs("输入学号:
",p->no,11);
inputs("输入姓名:
",p->name,15);
printf("输入年龄:
");
scanf("%d",&p->age);
printf("输入性别编号(0.男1.女):
");
scanf("%s",&p->sex);
printf("输入出生年月(XXXX/XX):
");
scanf("%s",p->birthday);
inputs("输入地址:
",p->address,20);
inputs("输入:
",p->tel,12);
inputs("输入E-mail:
",p->e_mail,20);
return(h);
}
3、程序结构
search2()函数流程图
4、各模块的功能
1)主函数:
循环进行目录选择
2)目录选择函数:
输出目录,将用户输入的选择项返回给主函数
3)初始化函数:
返回空指针,对链表指针进行初始化
4)创建函数:
建立链表,输入学生信息
5)输入函数:
判断输入的字符是否超出数组定义避免数据溢出
6)插入函数:
在指定学号后建立新的结点插入新的学生信息
7)保存函数:
将链表中的信息以二进制文件的形式保存
8)显示函数:
以表格形式显示学生信息
9)搜索函数1:
按学号搜索学生信息并显示
10)搜索函数2:
按姓名搜索学生信息并显示
11)删除函数:
删除指定学号的学生信息
12)修改函数:
修改指定学号的学生信息
5、试验结果
1)
初始界面
2)
输入学生信息
3)
显示学生信息
4)
插入学生信息
5)删除学生信息
6)
修改学生信息
7)
按学号查找学生信息
8)
按姓名查找学生信息
9)
保存学生信息
10)
初始化链表
11)
退出系统
6、设计中涉及的知识点
●变量的定义、初始化和使用
●结构体的定义、初始化和使用
●数组的定义、初始化和使用
●函数的定义、声明和使用
●链表的创建、初始化、修改、删除和使用
●文件的创建和使用
●指针的使用
●for循环、dowhile循环、while循环和switch语句的使用
●if语句的使用
7、体会
这是我第一次编写具有菜单功能的C程,所以参考了学生成绩管理系统的源程序。
我先把程序从头到尾阅读完,弄清楚每一行程序的目的是什么,自己在编写时需不需要进行修改、删除或者优化。
将程序阅读完以后,我开始编写自己的学生信息管理系统。
尽管有类似的程序作为参考,但我仍然发现有很多地方需要我自己进行修改、衔接。
我差不多花了一个下午的时间进行编写,然后开始调试,从最初的98个error调整到能够正常link,然后再对程序中无法按照我设计思路正常运行的部分一步一步进行调试。
这又差不多花掉了我一个下午的时间。
程序编写完成之后,我开始着手写实践报告。
对于一个有着三百多行的程序,画程序图花费了我两天的时间。
终于到此刻,我的C语言时间报告即将完成。
在途中,我经历过很多挫折,也考虑过放弃,但我庆幸我最终坚持下来了,因为此时我所体会到的成就感是对我这些日子不断努力的最大的回报。
我是一个信奉完美主义的人,要么不做要么就要做到自己能够做到的最好。
对于我来说,我喜欢我能够把一件事情完整地做出成果来。
通过这次的编程,我顺带复习了上学期所学的C语言,为9月份的计算机2级考试也作好了准备;更重要的是,我找出了自己在C语言上的薄弱环节,为我接下来的学习指明了方向。
8、参考文献
●《C语言程序设计(第2版)》
人民邮电出版社琳屈微著
●《C语言程序设计上机指导与习题(第2版)》
人民邮电出版社琳屈微黄晓璐著
9、附录:
程序清单
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
typedefstructz1
{
charno[11];
charname[15];
intage;
charsex;
charbirthday[8];
charaddress[20];
chartel[12];
chare_mail[20];
structz1*next;
}STUDENT;
STUDENT*init();
STUDENT*create();
STUDENT*del(STUDENT*h);
STUDENT*insert(STUDENT*h);
STUDENT*revise(STUDENT*h);
voidprint(STUDENT*h);
voidsearch1(STUDENT*h);
voidsearch2(STUDENT*h);
voidsave(STUDENT*h);
intmenu_select();
voidinputs(char*prompt,char*s,intcount);
voidmain()
{
STUDENT*head;
head=init();
for(;;)
{
switch(menu_select())
{
case0:
head=init();break;
case1:
head=create();break;
case2:
head=insert(head);break;
case3:
save(head);break;
case4:
print(head);break;
case5:
search1(head);break;
case6:
search2(head);break;
case7:
head=del(head);break;
case8:
head=revise(head);break;
case9:
exit(0);
}
}
}
intmenu_select()
{
char*menu[]={"************菜单************",
"0.初始化链表",
"1.输入学生信息",
"2.插入学生信息",
"3.保存学生信息",
"4.显示学生信息",
"5.按学号查找学生信息",
"6.按姓名查找学生信息",
"7.删除指定学号的学生信息",
"8.修改指定学号的学生信息",
"9.退出系统"};
intc,