c语言课程设计报告学生信息管理系统.docx
- 文档编号:7061345
- 上传时间:2023-01-16
- 格式:DOCX
- 页数:16
- 大小:37.05KB
c语言课程设计报告学生信息管理系统.docx
《c语言课程设计报告学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告学生信息管理系统.docx(16页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告学生信息管理系统
题目:
学生信息管理系统
一、需求分析
任务要求:
自学C语言中有关链表及外部文件的内容,设计学生信息管理系统。
具体要求如下:
◆建立学生信息,信息至少包括名字、性别、年龄、学号、系别、家庭信息等内容;
◆能够提供添加、删除和修改学生信息等功能;
◆能将通讯录保存在文件中;
◆能够按指定方式输出学生信息。
系统功能需求分析:
★1、为存储学生信息,需定义一个结构体类型,成员名字、性别、年龄、学号、系别、家庭信息等,并建立链表,定义该结构体类型的指针,用于指向各结点;
★2、分别建立具有添加、删除、修改、查询等功能的子函数,完成相应功能,对程序实现模块化。
这其中要用到对链表的删除、插入等知识。
删除时用一结构体指针指向链表的第一个结点,检查该节点的值是否等于输入的要删除的学号,若相等就删除,不相等则后移指针,直至表尾。
插入时也要先找到相应结点,再添加。
★3、为实现存储功能,需用到文件的相关函数,打开文件,将添加、修改或删除的信息存入磁盘中。
★4、为以表格的形式输出文件,宏定义格式化输出语句,指定输出学生信息。
二、概要设计
系统总体设计框架:
对程序进行模块化,建立添加、修改、删除、查找和显示功能的子函数,各子函数中运用链表存储数据。
从主函数开始执行,调用各个子函数,并运用文件相关知识将信息存入磁盘中。
系统功能模块图:
三、详细设计
主要功能模块的算法设计思路如下:
1、查询通讯录信息(voidchakan())
(1)为开辟一个新单元
(2)输入查询关键字:
(3)读取保存的文件数据输入ASCLL字符:
(4)在链表中寻找相应结点;
(5)调用输出函数,输出结点信息。
2、添加信息函数(voidadd())
(1)定义指向结构体变量的指针;
(2)移动指针,找到插入结点;
(3)在要插入的结点输入信息;
(4)调用保存函数,打开文件,保存输入信息。
3、删除信息函数(voiddel())
(1)定义指向结构体变量的指针;
(2)用指针检验链表中是否有记录,若没记录,返回主函数;
(3)根据要修改的编号查找要删除的结点;
(4)修改链表,删除对应结点。
4、修改信息函数(voidxiugai())
(1)定义指向结构体变量的指针;
(2)读取保存的文件数据输入ASCLL字符:
(3)用指针检验链表中是否有记录,若没记录,返回主函数;
(4)根据要修改的编号查找对应结点;
(5)修改信息;
(6)打开文件,保存修改记录。
5、保存信息函数(baocun())
(1)定义指向结构体变量的指针;
(2)用文件指针指向要读写的磁盘文件名,若没有则新建此文件名:
(3)用指针检验链表中是否有记录,若没记录,返回主函数:
(4)打开文件,保存记录:
6、屏幕操作函数(voidstubent187())
(1)以一定格式输出所想要的图形:
四、主要源程序代码
定义变量:
(对整个程序定义全局变量)
#include"stdio.h"
#include"conio.h"
#defineSTUDENTID/*所有STUDENT都用ID来代替*/
typedefstructnode/*定义结构体*/
{charming[50];/*名字*/
charxing[50];/*性别*/
charnian[50];/*年龄*/
intxuehao;/*学号*/
charxibie[50];/*专业*/
charsushe[50];/*宿舍号*/
charjia[50];/*家庭地址*/
structnode*next;
}ID;/*学生信息(变量名)*/
ID*head=NULL;/*定义一个头指针*/
FILE*zhi;/*定义一个文件指针*/
主菜单界面:
(进入屏幕界面的形式)
voidstubent187()/*屏幕格式函数*/
{printf("****************************************\n");
printf("*学生信息管理系统*\n");
printf("**\n");
printf("*请选择:
1:
查看;2:
添加;3:
删除;*\n");
printf("*4:
修改;0:
退出系统*\n");
printf("**\n");
printf("*******************************************\n");
printf(">>>>>>>>>>>>>输入0~4数字<<<<<<<<<<<<<\n");
return;
}
查看学生信息记录:
(对以保存在磁盘文件的学生信息进行查询)
voidchakan()
{/*查看*/
ID*t;
t=head;
t=(ID*)malloc(sizeof(ID));/*为t开辟一个新单元*/
if((zhi=fopen("yihu1.txt","rb"))==NULL)printf("没有此文件\n");
else
{printf("%10s%10s%10s%10s%10s%10s%10s\n","ming","xing","nian","xuehao","eng","sushe","jia");/*输出一个屏幕格式*/
while(!
feof(zhi))
{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia);/*读取保存的文件数据输入ASCLL字符:
*/
printf("%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以这形式输出各个学生信息*/
t->next=(ID*)malloc(sizeof(ID));t=t->next;
}
};
}
添加学生信息记录:
()
voidadd()
{
chari;/*添加*/
ID*t1,*t2;
t1=t2=NULL;
loop:
t1=(ID*)malloc(sizeof(ID));/*为t1开辟一个新单元*/
printf("请输入姓名:
");scanf("%s",&t1->ming);/*姓名*/
printf("请输入性别:
");scanf("%s",&t1->xing);/*性别*/
printf("请输入年龄:
");scanf("%s",&(t1->nian));/*年龄*/
printf("请输入学号:
");scanf("%d",&(t1->xuehao));/*学号*/
printf("请输入系别:
");scanf("%s",&(t1->xibie));/*系别*/
printf("请输入宿舍号:
");scanf("%s",&(t1->sushe));/*宿舍号*/
printf("请输入家庭地址:
");scanf("%s",&(t1->jia));/*家庭地址*/
t1->next=NULL;
if(head==NULL)/*如果头结点为空*/
{head=t1;/*t1指向头结点*/
t2=t1;
}
else{
t2=head;
while(t2->next!
=NULL)t2=t2->next;/*没有成立则指向下个结点*/
t2->next=t1;
}getchar();
printf("是否继续添加(Y/N):
\n");
scanf("%s",&i);/*输入Y/N*/
if(i=='y'||i=='Y')
{clrscr();gotoloop;/*清屏在循环*/
}
else{printf("是否保存此次添加(Y/N)\n");scanf("%s",&i);
if(i=='y'||i=='Y')/*是否要保存*/
{baocun();/*调用保存*/
clrscr();/*清屏*/
stubent187();/*调用屏幕函数*/
printf("保存成功");
}
elseif(i=='n'||i=='N')
{
clrscr();/*清屏*/
stubent187();}/*调用屏幕函数*/
}
return;
}
删除学生信息操作:
(对以存的学生信息进行删除)
voiddel()
{/*删除*/
ID*A,*B;/*定义指针*/
chart,i;intxuehao;/*定义整型变量与字符型变量*/
A=B=NULL;
if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");
else
{loop:
printf("请输入要删除的学生学号:
");scanf("%d",&xuehao);
while(!
feof(zhi))
{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia);/*读取保存的文件数据输入ASCLL字符:
*/
if(A!
=NULL&&A->xuehao!
=xuehao)
A=A->next;
elsebreak;
}
if(A->xuehao==xuehao)
{head=A->next;
free(*A);
printf("成功!
\n");
printf("是否继续删除(Y/N)");scanf("%s",&i);
if(i=='y'||i=='Y')
{clrscr();gotoloop;
}
if(i=='n'||i=='N')
printf("是否保存此次删除(Y/N)\n");scanf("%s",&i);
if(i=='y'||i=='Y')
baocun();
else
clrscr();
stubent187();
}
elseprintf("无法找到此编号\n");
}
}
修改学生信息操作:
(对保存的学生信息进行修改)
voidxiugai()
{/*修改*/
ID*t1,*t2;/*定义指针*/
inti;charxuehao;/*定义整型变量与字符型变量*/
t1=head;
if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");
loop:
printf("请输入要修改的学号:
");scanf("%s",&xuehao);/*输入编号*/
while(!
feof(zhi))
{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);*读取保存的文件数据输入ASCLL字符:
*/
if(t1!
=NULL&&t1->xuehao!
=xuehao)
t1=t1->next;
elsebreak;
}
if(t1->xuehao==xuehao)
{fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);
printf("输入名字:
");scanf("%s",&t1->ming);/*名字*/
printf("输入性别:
");scanf("%s",&(t1->xing));/*性别*/
printf("输入年龄:
");scanf("%s",&(t1->nian));/*年龄*/
printf("输入学号:
");scanf("%s",&t1->xuehao);/*学号*/
printf("输入系别:
");scanf("%s",&(t1->xibie));/*系别*/printf("输入专业:
");scanf("%s",&(t1->sushe));/*宿舍号*/printf("输入家庭地址:
");scanf("%s",&(t1->jia));/*家庭地址*/
printf("成功!
\n");
printf("是否继续修改(Y/N)");scanf("%d",&i);
if(i=='y'||i=='Y')
{clrscr();gotoloop;
}
if(i=='n'||i=='N')
printf("是否保存此次修改(Y/N)\n");scanf("%c",&i);
if(i=='y'||i=='Y')
baocun();
else
clrscr();/*清屏*/
stubent187();/*调用屏幕函数*/
}
elseprintf("没有此编号\n");
return;
}
保存添加,删除,修改学生的信息:
(操作过后是否保存)
baocun()/*保存*/
{
ID*t=head;/*定义指针*/
zhi=fopen("yihu1.txt","a+");/*(读写yihu.txt文本)*/
while(t!
=NULL){
fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以zhi为文件指针保存*/
t=t->next;
}
fclose(zhi);/*关闭此文件*/
printf("成功!
\n");
return;
}
主菜单操作:
(选择所需要的操作)
main()/*主函数*/
{
inti;/*定义整形变量i*/
stubent187();/*调用屏幕函数*/
while
(1)
{
scanf("%d",&i);/*输入要执行的操作*/
switch(i)
{case1:
chakan();break;/*调用查看函数*/
case2:
add();break;/*调用添加函数*/
case3:
del();break;/*调用删除函数*/
case4:
xiugai();break;/*调用修改函数*/
case0:
exit(0);/*结束*/
default:
printf("输入错误,请在此输入\n");continue;
}/*输入不是0~4的,则返回*/
}
}
Ⅰ源函数代码:
voidchakan()
{/*查看*/
ID*t;
t=head;
t=(ID*)malloc(sizeof(ID));/*为t开辟一个新单元*/
if((zhi=fopen("yihu1.txt","rb"))==NULL)printf("没有此文件\n");
else
{printf("%10s%10s%10s%10s%10s%10s%10s\n","ming","xing","nian","xuehao","eng","sushe","jia");/*输出一个屏幕格式*/
while(!
feof(zhi))
{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t->ming,&t->xing,&t->nian,&t->xuehao,&t->xibie,&t->sushe,&t->jia);/*读取保存的文件数据输入ASCLL字符:
*/
printf("%10s%10s%10s%10d%10s%10s%10s\n",t->ming,t->xing,t->nian,t->xuehao,t->xibie,t->sushe,t->jia);/*以这形式输出各个学生信息*/
t->next=(ID*)malloc(sizeof(ID));t=t->next;
}
};
}
voidadd()
{
chari;/*添加*/
ID*t1,*t2;
t1=t2=NULL;
loop:
t1=(ID*)malloc(sizeof(ID));/*为t1开辟一个新单元*/
printf("请输入姓名:
");scanf("%s",&t1->ming);/*姓名*/
printf("请输入性别:
");scanf("%s",&t1->xing);/*性别*/
printf("请输入年龄:
");scanf("%s",&(t1->nian));/*年龄*/
printf("请输入学号:
");scanf("%d",&(t1->xuehao));/*学号*/
printf("请输入系别:
");scanf("%s",&(t1->xibie));/*系别*/
printf("请输入宿舍号:
");scanf("%s",&(t1->sushe));/*宿舍号*/
printf("请输入家庭地址:
");scanf("%s",&(t1->jia));/*家庭地址*/
t1->next=NULL;
if(head==NULL)/*如果头结点为空*/
{head=t1;/*t1指向头结点*/
t2=t1;
}
else{
t2=head;
while(t2->next!
=NULL)t2=t2->next;/*没有成立则指向下个结点*/
t2->next=t1;
}getchar();
printf("是否继续添加(Y/N):
\n");
scanf("%s",&i);/*输入Y/N*/
if(i=='y'||i=='Y')
{clrscr();gotoloop;/*清屏在循环*/
}
else{printf("是否保存此次添加(Y/N)\n");scanf("%s",&i);
if(i=='y'||i=='Y')/*是否要保存*/
{baocun();/*调用保存*/
clrscr();/*清屏*/
stubent187();/*调用屏幕函数*/
printf("保存成功");
}
elseif(i=='n'||i=='N')
{
clrscr();/*清屏*/
stubent187();}/*调用屏幕函数*/
}
return;
}
voiddel()
{/*删除*/
ID*A,*B;/*定义指针*/
chart,i;intxuehao;/*定义整型变量与字符型变量*/
A=B=NULL;
if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");
else
{loop:
printf("请输入要删除的学生学号:
");scanf("%d",&xuehao);
while(!
feof(zhi))
{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&A->ming,&A->xing,&A->nian,&A->xuehao,&A->xibie,&A->sushe,&A->jia);/*读取保存的文件数据输入ASCLL字符:
*/
if(A!
=NULL&&A->xuehao!
=xuehao)
A=A->next;
elsebreak;
}
if(A->xuehao==xuehao)
{head=A->next;
free(*A);
printf("成功!
\n");
printf("是否继续删除(Y/N)");scanf("%s",&i);
if(i=='y'||i=='Y')
{clrscr();gotoloop;
}
if(i=='n'||i=='N')
printf("是否保存此次删除(Y/N)\n");scanf("%s",&i);
if(i=='y'||i=='Y')
baocun();
else
clrscr();
stubent187();
}
elseprintf("无法找到此编号\n");
}
}
voidxiugai()
{/*修改*/
ID*t1,*t2;/*定义指针*/
inti;charxuehao;/*定义整型变量与字符型变量*/
t1=head;
if((zhi=fopen("yihu1.txt","a+"))==NULL)printf("没有此信息文件\n");
loop:
printf("请输入要修改的学号:
");scanf("%s",&xuehao);/*输入编号*/
while(!
feof(zhi))
{fscanf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",&t1->ming,&t1->xing,&t1->nian,&t1->xuehao,&t1->xibie,&t1->sushe,&t1->jia);*读取保存的文件数据输入ASCLL字符:
*/
if(t1!
=NULL&&t1->xuehao!
=xuehao)
t1=t1->next;
elsebreak;
}
if(t1->xuehao==xuehao)
{fprintf(zhi,"%10s%10s%10s%10d%10s%10s%10s\n",t1->ming,t1->xing,t1->nian,t1->xuehao,t1->xibie,t1->sushe,t1->jia);
printf("输入名字:
");scanf("%s",&t1->ming);/*名字*/
printf("输入性别:
");scanf("%s",&(t1->xing));/*性别*/
printf("输入年龄:
");scanf("%s",&(t1->nian));/*年龄*/
printf("输入学号:
");scanf("%s",&t1->xuehao);/*学号*/
printf("输入系别:
");scanf("%s",&(t1->xibie));/*系别*/printf("输入专业:
");scanf("%s",&(t1->sushe));/*宿舍号*/printf("输入家庭地址:
");scanf("%s"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 学生 信息管理 系统