学生信息管理系统设计.docx

上传人:b****3 文档编号:5360303 上传时间:2022-12-15 格式:DOCX 页数:23 大小:245.14KB
下载 相关 举报
学生信息管理系统设计.docx_第1页
第1页 / 共23页
学生信息管理系统设计.docx_第2页
第2页 / 共23页
学生信息管理系统设计.docx_第3页
第3页 / 共23页
学生信息管理系统设计.docx_第4页
第4页 / 共23页
学生信息管理系统设计.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

学生信息管理系统设计.docx

《学生信息管理系统设计.docx》由会员分享,可在线阅读,更多相关《学生信息管理系统设计.docx(23页珍藏版)》请在冰豆网上搜索。

学生信息管理系统设计.docx

学生信息管理系统设计

 

河南理工大学

计算机软件学院实训报告

 

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 其它考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1