学生信息管理系统设计.docx
《学生信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统设计.docx(23页珍藏版)》请在冰豆网上搜索。
学生信息管理系统设计
河南理工大学
计算机软件学院实训报告
2009—2010学年第一学期
课程名称C语言课程设计报告
设计题目学生信息管理系统设计
学生姓名范玉普
学号410920030142
专业班级网络技术一班
指导教师姜国权
2010年01月01日
目录
1设计任务书··············································2
2功能设计················································2
3程序代码设计············································3
4具体程序················································5
5图形···················································16
6课程设计总结············································19
7致谢····················································19
1设计任务书
1.1题目与要求
本人计划编写学生信息管理系统,主要用来进行学生管理。
具体要求如下:
学生信息包括:
学号,姓名,年龄,性别,出生年月,地址,电话等。
1.2本系统涉及的知识点
结构、数组、循环、函数、分支、指针
2功能设计
2.1算法设计
1)系统以菜单方式工作
2)学生信息录入功能(学生信息用文件保存)---输入
3)学生信息浏览功能---输出
4)排序功能
5)按学号查询
6)按姓名查询
7)学生信息的删除与修改
2.2部分模块流程图
系统流程图
3程序代码设计
定义类型:
structstudent,Node*Locate,Temp,charfindmess
声明函数调用的范围:
charname,charsex,charnativeplace,node
3.1输入模块
1)函数原型:
voidmenu(),voidprintstart(),voidAdd(Linkl),voidQur(Linkl),voidModify(Linkl),voidDisp(Linkl)
2)功能:
intstruct函数声明函数char引用一系列数组,利用switch和break语句实现函数之间的循环,case语句为循环体提供了执行体,利用continue语句实现循环的正常进行。
Strlen语句实现了电脑对输入数据进行比较。
Return语句实现了程序的多次进行任意次结束。
3)变量及类型:
int进行整形数据的输入
Struct定义函数
指针变量为数据提供了地址
4)说明:
本程序分为五个板块
<1>登记学生资料
当运行时输入1,则可增加学生资料,即可输入学生信息。
<2>查询学生资料
当运行时输入2,则可查询学生信息,可按学生学号和学生姓名这两种方式查询,当输入正确时,可得到要查学学生的信息。
<3>删除学生资料
当运行时输入3,则可删除学生信息,可按学生学号和学生姓名这两种方式删除,当输入正确时,可删除需要删除的学生的信息。
<4>修改学生资料
当运行时输入4,则可修改学生信息,可按学生学号和学生姓名这两种方式修改,当输入正确时,就可重新输入学生信息。
<5>保存学生资料
当运行时输入5,则可保存学生信息,当再次运行时,第一次保存的的学生信息就不会丢掉,随时可进行查询删除修改。
3.2输出模块
4具体程序
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
intshoudsave=0;/**/
structstudent
{
charnum[10];/*学号*/
charname[20];
charsex[4];
charbirth[20];
intage;
chartele[11];
charaddr[30];
};
typedefstructnode
{
structstudentdata;
structnode*next;
}Node,*Link;
/*************************************************************************************/
voidmenu()
{
printf("********************************************************************************");
printf("\t1登记学生资料\t\t\t\t\t2查询学生资料\n");
printf("\t3删除学生资料\t\t\t\t\t4修改学生资料\n");
printf("\t5保存学生资料\t\t\t\t\t0退出系统\n");
printf("********************************************************************************\n");
}
/*************************************************************************************/
voidprintstart()
{
printf("-----------------------------------------------------------------------\n");
}
voidWrong()
{
printf("\n=====>提示:
输入错误!
\n");
}
voidNofind()
{
printf("\n=====>提示:
没有找到该学生!
\n");
}
voidprintc()/*本函数用于输出中文*/
{
printf("学号\t姓名\t性别\t电话\t出生年月\t年龄\t地址\n");
}
/*************************************************************************************/
voidprinte(Node*p)/*本函数用于输出英文*/
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.tele,p->data.birth,p->data.age,p->data.addr);
}
Node*Locate(Linkl,charfindmess[],charnameornum[])/*该函数用于定位连表中符合要求的接点,并返回该指针*/
{
Node*r;
if(strcmp(nameornum,"num")==0)/*按学号查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.num,findmess)==0)
returnr;
r=r->next;
}
}
elseif(strcmp(nameornum,"name")==0)/*按姓名查询*/
{
r=l->next;
while(r!
=NULL)
{
if(strcmp(r->data.name,findmess)==0)
returnr;
r=r->next;
}
}
return0;
}
/*************************************************************************************/
voidAdd(Linkl)/*增加学生*/
{
Node*p,*r,*s;
charnum[10];
r=l;
s=l->next;
while(r->next!
=NULL)
r=r->next;/*将指针置于最末尾*/
while
(1)
{
printf("'0'返回上一级菜单");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:
学号为'%s'的学生已经存在,若要修改请你选择'4修改'!
\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}
p=(Node*)malloc(sizeof(Node));
printf("请你输入学号:
");
scanf("%s",p->data.num,num);
getchar();
printf("请你输入姓名:
");
scanf("%s",p->data.name);
getchar();
printf("请你输入性别:
");
scanf("%s",p->data.sex);
getchar();
printf("请你输入年龄:
");
scanf("%d",&p->data.age);
getchar();
printf("请你输入出生年月:
");
scanf("%d",&p->data.birth);
getchar();
printf("请你输入电话:
");
scanf("%d",&p->data.tele);
getchar();
printf("请输入地址:
");
scanf("%s",&p->data.addr);
getchar();
/*信息输入已经完成*/
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;
}
}
/*************************************************************************************/
voidQur(Linkl)/*查询学生*/
{
intsel;
charfindmess[20];
Node*p;
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以查询!
\n");
return;
}
printf("\n=====>1按学号查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/*学号*/
{
printf("请你输入要查找的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
elseif(sel==2)/*姓名*/
{
printf("请你输入要查找的姓名:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找结果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();
}
/*************************************************************************************/
voidDel(Linkl)/*删除*/
{
intsel;
Node*p,*r;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以删除!
\n");
return;
}
printf("\n=====>1按学号删除\n=====>2按姓名删除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("请你输入要删除的学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:
该学生已经成功删除!
\n");
shoudsave=1;
}
else
Nofind();
}
elseif(sel==2)
{
printf("请你输入要删除的姓名:
");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!
=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:
该学生已经成功删除!
\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}
/*************************************************************************************/
voidModify(Linkl)
{
Node*p;
charfindmess[20];
if(!
l->next)
{
printf("\n=====>提示:
没有资料可以修改!
\n");
return;
}
printf("请你输入要修改的学生学号:
");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("请你输入新学号:
");
scanf("%s",p->data.num);
getchar();
printf("请你输入新姓名:
");
scanf("%s",p->data.name);
getchar();
printf("请你输入新性别:
");
scanf("%s",p->data.sex);
getchar();
printf("请你输入新的年龄:
");
scanf("%d",&p->data.age);
getchar();
printf("请你输入新的出生年月:
");
scanf("%d",&p->data.birth);
getchar();
printf("请你输入新的电话:
");
scanf("%d",&p->data.tele);
getchar();
printf("请输入新的地址:
");
scanf("%s",&p->data.tele);
getchar();
printf("\n=====>提示:
资料修改成功!
\n");
shoudsave=1;
}
else
Nofind();
}
/**************************************************************************************************/
voidDisp(Linkl)
{
intcount=0;
Node*p;
p=l->next;
if(!
p)
{
printf("\n=====>提示:
没有资料可以显示!
\n");
return;
}
printf("\t\t\t\t显示结果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}
voidSort(Linkl)
{
Linkll;
Node*p,*rr,*s;
ll=(Link)malloc(sizeof(Node));/*用于做新的连表*/
ll->next=NULL;
if(l->next==NULL)
{
printf("\n=====>提示:
没有资料可以排序!
\n");
return;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node));/*新建接点用于保存信息*/
s->data=p->data;
s->next=NULL;
rr=ll;
while(rr->next!
=NULL)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:
排序已经完成!
\n");
}
/*************************************************************************************/
voidSave(Linkl)
{
FILE*fp;
Node*p;
intflag=1,count=0;
fp=fopen("c:
\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:
重新打开文件时发生错误!
\n");
exit
(1);
}
p=l->next;
while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:
文件保存成功.(有%d条记录已经保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}
/*************************************************************************************/
voidmain()
{
Linkl;/*连表*/
FILE*fp;/*文件指针*/
intsel;
charch;
charjian;
intcount=0;
Node*p,*r;
printf("\t\t\t\t学生信息管理系统\n\t\t\t\t-------网络技术09-1班\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;
fp=fopen("C:
\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:
文件还不存在,是否创建?
(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:
\\student","wb");
else
exit(0);
}
printf("\n=====>提示:
文件已经打开,正在导入记录......\n");
while(!
feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp))/*将文件的内容放入接点中*/
{
p->next=NULL;
r->next=p;
r=p;/*将该接点挂入连中*/
count++;
}
}
fclose(fp);/*关闭文件*/
printf("\n=====>提示:
记录导入完毕,共导入%d条记录.\n",count);
whi