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