C语言学生信息管理系统4.doc
《C语言学生信息管理系统4.doc》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统4.doc(22页珍藏版)》请在冰豆网上搜索。
学生信息管理系统
本题目设计目的是训练用户的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件和单链表的各种基本操作。
本程序中涉及结构体、单链表、文件及各种语句的运用如for();switch();if….else等方面的知识。
通过本程序的训练,使用户能对C语言的文件操作有一个更深刻的了解,初步掌握链表的一些结构及构成。
掌握利用单链表存储结构实现对用户成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的基础。
1、问题定义
创建一个学生信息管理系统。
假设系统中学生信息记录包括1录入学生信息:
学号,姓名,年龄,性别,出生年月,地址,电话和E-mail。
2:
浏览学生信息。
3查询学生信息:
按学号查询,按姓名查询。
4:
删除学生信息。
5:
修改学生信息。
6:
退出系统。
程序的运行效果如下图所示,选择任意菜单后,实现相应功能。
在问题定义阶段要考虑题目的可行性和需求分析,接下来进入开发阶段,完成系统设计和系统实现的任务。
2、系统设计
2.1总体设计
采用模块化的程序设计方法,即将较大的任务按照一定的原则分为一个个较小的任务,然后分别设计各个小任务。
需要注意的是划分出来的模块应该相对独立但又相关,且容易理解。
可以用模块化层次结构图(即模块图)来分析其任务的划分,一般从上到下进行,最上面一层是主模块,下面各层是其上一层模块的逐步细化描述。
录入学生信息
学生通讯录管理系统
浏览学生信息
查询学生信息
推出管理系统
修改学生信息
删除学生信息
按姓名查询
按姓名查找
本号码管理系统要求采用单链表实现,它由如下六大功能模块组成:
l录入学生信息模块。
l浏览学生信息模块。
l查询学生信息模块。
l删除学生信息模块。
l修改学生信息模块。
l退出系统模块。
2.2详细设计
#include
#include
#include
#include
#defineNULL0
#defineLENsizeof(structstudent)
#defineFILE_DATA_PATH"c:
\student.txt"
structstudent
{longintnum;
charname[20];
intage;
charsex[4];
charbirthday[10];
charaddress[30];
longinttele_num;
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()
{welcome();
mainmenu();
}
/*显示欢迎信息*/
voidwelcome()
{
printf("\t\t\t+---------------------------+\n");
printf("\t\t\t||\n");
printf("\t\t\t|欢迎使用学生信息管理系统|\n");
printf("\t\t\t||\n");
printf("\t\t\t+---------------------------+\n");
}
/*系统主菜单*/
voidmainmenu()
{
intchoice;
choice=-1;
readData();
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("\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);
}
/*录入学生信息*/
voidrecord()
{
structstudent*p0;
p0=(structstudent*)malloc(LEN);
printf("请输入学生的学号:
");
scanf("%ld",&p0->num);
printf("请输入学生的姓名:
");
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("%ld",&p0->tele_num);
printf("请输入学生的E-mail:
");
scanf("%s",p0->E_mail);
insert(p0);
printf("该学生的信息为:
\n");
printf("-------------------------------------------------------------------------------");
printf("学号\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;
else
p2->next=p0;
p0->next=p1;
}
else
{
p1->next=p0;
p0->next=NULL;
}
}
TOTAL_NUM++;
}
voiddisplay(structstudent*p)
{
printf("%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",p->num,p->name,p->age,p->sex,p->birthday,p->address,p->tele_num,p->E_mail);
}
/*浏览学生信息*/
voiddisplayAll()
{
structstudent*p;
printf("学生总数:
%d\n",TOTAL_NUM);
p=head