1、 程序设计基础课程设计 试验汇报书 目录 1. 设计题目 3 2. 正文 3 2.1 系统介绍 3 2.2选题背景 4 2.3设计内容 4 2.4设计思绪 4 2.5算法(条列式或步骤图) 4 2.6程序清单和运行结果 9 2.7总结 15 1. 设计题目 学生信息管理系统设计 2. 正文 2.1 系统介绍 学生信息包
2、含:学号,姓名,年纪,性别,出生年月,地址,电话,E-mail等。试设计一学生信息管理系统,使之能提供以下功效: 1、系统以菜单方法工作 2、学生信息录入功效(学生信息用文件保留)--输入 3、学生信息浏览功效--输出 4、学生信息查询功效--按学号查询、按姓名查询、 5、学生信息删除和修改(可选项) 要求:使用文件方法存放数据。 2.2选题背景 经典计算机问题,设计 学生信息管理系统,能够进行多项系统信息管理功效。 2.3设计内容 设计学生信息管理各个功效。系统以菜单方法工作。学生信息录入功效(学生信息用文件保留)--输入。学生信息浏览功效
3、--输出。学生信息查询功效--按学号查询、按姓名查询。学生信息删除和修改(可选项) 2.4设计思绪 将程序各个功效分开独立实施,问题有大而小,细化。 2.5算法(条列式或步骤图) 主程序模块: 准 备 输入选择: 判定: 运行不一样功效: 按退格键 结束 创建文件模块(独立函数): 输
4、入要创建文件夹得文件名,并创建文件 输入学生数目: 输入一个学生信息并存放到文件夹: 是否人数足够 NO YES 返回主程序 删除信息模块(独立函数): 输入要删除得姓名 按读取方法打开用于存放文件文件夹 创建100个结
5、构体,并将文件中信息全部存放到结构体中 不相同 将指针指向下一个结构体,判定该结构体姓名和要删除姓名是否相同 相同 经过链表把要删除得同学信息在结构体链表中删除 按写入方法
6、打开文件,结构体全部写入文件 显示浏览信息模块(独立函数) 返回主程序 输入存放信息文件夹文件名,并打开文件夹 创建一百个结构体数组 将一个结构体大小从文件中读取到内存,并显示 从文件中读入一个结构体大小,并显示到内存 文件是否抵达最终 返回主程序
7、
查找学生信息模块(独立函数):
输入存放信息文件夹文件名,并打开文件夹
创建一百个结构体数组 将一个结构体大小从文件中读取到内存,并显示
输入要查找信息学生名,
指针指向下一个结构体
判定学生信息和是否为要查找人信息
输出学生信息
返回主程序
2.6程序清单和运行结果
#include
8、nclude
9、" 1、学生信息录入功效(学生信息用文件保留)--输入\n"); printf(" 2、学生信息浏览功效--输出\n"); printf(" 3、学生信息查询功效--按学号查询、按姓名查询\n"); printf(" 4、学生信息删除和修改(可选项)\n"); printf(" 按其它任意键加回车退出程序\n"); } \* 创建文件夹并存入信息模块: *\ void credit(int n) { FILE *fp; char fpname[20];
10、 struct student *head,*next,*end; int i; printf("请输入用于存放文件文件路劲及文件名:"); scanf("%s",fpname); getchar(); fp=fopen(fpname,"w+"); head=(struct student *)malloc(sizeof(struct student)); printf("请输入学生 学号 姓名 性别 出生年 月 日 地址 电话 e_mail:"); scanf("%d %s %c %d %d %d %s %s %s",&head->number
11、head->name,&head->sex,&(*head).birthday.year,&(*head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail); getchar(); fprintf(fp,"%d %s %c %d %d %d %s %s %s",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->
12、address,head->tel,head->E_mail);
end=head;
for(i=1;i
13、month,&(*next).birthday.day,next->address,next->tel,next->E_mail); getchar(); fprintf(fp,"%d %s %c %d %d %d %s %s %s",next->number,next->name,next->sex,(*next).birthday.year,(*next).birthday.month,(*next).birthday.day,next->address,next->tel,next->E_mail); end->link=next; end
14、next; end->link=NULL; } fclose(fp); } \* 浏览信息模块: *\ void show2(int n) { FILE *fp; int i; char fpname[20]; struct student *head; head=(struct student *)malloc(sizeof(struct student)); printf("请输入存放信息文件路径和文件名:"); gets(fpname); fp=fopen(fpname,"r+"); for(i=0;
15、i
16、thday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail); } fclose(fp); } \* 按学号查找学生信息模块: *\ int search1(int n) { int i,checkname; FILE *fp; char fpname[20]; struct student *head; head=(struct student *)m
17、alloc(sizeof(struct student));
printf("请输入存放信息文件路径和文件名:");
gets(fpname);
fp=fopen(fpname,"r+");
printf("请输入要查询信息学生学号:");
scanf("%d",&checkname);
getchar();
for(i=0;i
18、head).birthday.month,&(*head).birthday.day,head->address,head->tel,head->E_mail); if(checkname==head->number) { printf("%d %s %c %d %d %d %s %s %s\n",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head-
19、>E_mail); fclose(fp); return(1); } } printf("未找到"); } \* 按姓名查找学生信息模块: *\ void search2(int n) { int i; FILE *fp; char fpname[20],checkname[10]; struct student *head; head=(struct student *)malloc(sizeof(struct student)); printf("请输入存放信息文件路径和
20、文件名:");
gets(fpname);
fp=fopen(fpname,"r+");
printf("请输入要查询信息学生姓名:");
scanf("%s",checkname);
getchar();
for(i=0;i
21、dress,head->tel,head->E_mail); if(strcmp(checkname,head->name)==0) { printf("%d %s %c %d %d %d %s %s %s",head->number,head->name,head->sex,(*head).birthday.year,(*head).birthday.month,(*head).birthday.day,head->address,head->tel,head->E_mail); fclose(fp); return(1); }
22、 } printf("未找到\n"); } \* 删除或修改文件信息模块: *\ int most(n) { FILE *fp; char get; char fpname[20]; struct student *ans[500]; int i; char checkname[10]; printf("请输入存放信息文件路径和文件名:"); gets(fpname); fp=fopen(fpname,"r+"); ans[0]=(struct student *)malloc(size
23、of(struct student));
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&ans[0]->number,ans[0]->name,&ans[0]->sex,&(*ans[0]).birthday.year,&(*ans[0]).birthday.month,&(*ans[0]).birthday.day,ans[0]->address,ans[0]->tel,ans[0]->E_mail);
for(i=1;i 24、uct student));
fscanf(fp,"%d %s %c %d %d %d %s %s %s",&ans[i]->number,ans[i]->name,&ans[i]->sex,&(*ans[i]).birthday.year,&(*ans[i]).birthday.month,&(*ans[i]).birthday.day,ans[i]->address,ans[i]->tel,ans[i]->E_mail);
ans[i-1]->link=ans[i];
}
ans[i]->link=NULL;
printf("假如想修改信 25、息请输入1加回车键,想删除信息输入2加回车键:");
get=getchar();
getchar();
if(get=='1')
{
printf("请输入要修改信息学生姓名:");
scanf("%s",checkname);
getchar();
for(i=0;i 26、 %c %d %d %d %s %s %s",&ans[i]->number,ans[i]->name,&ans[i]->sex,&(*ans[i]).birthday.year,&(*ans[i]).birthday.month,&(*ans[i]).birthday.day,ans[i]->address,ans[i]->tel,ans[i]->E_mail);
getchar();
}
}
}
if(get=='2')
{
printf("请输入要删除学生姓名:");
scanf("%s",checkname);
get 27、char();
for(i=0;i 28、[i]).birthday.year,(*ans[i]).birthday.month,(*ans[i]).birthday.day,ans[i]->address,ans[i]->tel,ans[i]->E_mail);
}
fclose(fp);
return(n);
}
\*主函数模块*\
void main()
{
char get,get2;
int n;
while(1)
{
show();
get=getchar();
getchar();
switch( 29、get)
{
case '1':
printf("请输入学生人数:");
scanf("%d",&n);
getchar();
credit(n);
break;
case '2':
show2(n);
break;
case '3':
printf("按学号查找请输入1加回车键,按姓名查询请输入2加回车键:");
get2=getchar();
getchar();
if(get2=='1')
{
search1(n);
}
if(get2=='2')
{
search2(n);
}
break;
case '4':
n=most(n);
break;
}
if(get!='1'&&get!='2'&&get!='3'&&get!='4')
{
break;
}
}
}
2.7总结
该程序关键使用结构体和结构化程序设计,调用文件函数,设计函数时保持头脑思绪清楚,有条理,保持各功效独立函数来实现,需要对程序能熟练使用和掌握,我函数侧重对单链表使用,同时侧重文件利用时文件流动时文件信息不会流失。






