学生证信息管理系统
一、目的要求
本课程设计任务的目的是要求学生按照分析、设计、编码、调试和测试的软件开发过程独立完成管理系统设计,并能最终实现本系统的功能要求。
二、功能要求
题目描述:
假设某单位学生证基本信息主要包括:学号、姓名、班级、专业、籍贯等,本系统应能对这些基本信息进行管理,并要求具有以下功能:
(1)、能通过键盘输入学生的学生证信息;
(2)、给定学号显示某位学生的信息;
(3)、给定某个班级的班级号,显示该班级所有学生的信息;
(4)、给定某位学生的学生号,能修改该学生的信息。
题目要求:
(1)、为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项希望进行的操作项目;
(2)、学生信息按学号查询或删除、排序功能按学号从小到大排列。
(3)、要求以上功能分别用函数实现。并要求用C语言的文件操作语句将以上结果把存在projectchoose.txt。
输入输出要求:
(1)、应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目,进入每个操作系统后,程序的提示输入相应的信息;
(2)、要求用户输入数据时,要给出清晰明确的提示信息,包括输入的数据内容、格式及结束方式等。
三、功能分析
①、建立结构体数组来保存学生信息;
②、设计好菜单界面并用system("cls");语句来清空屏幕,使得用户每次进行一次操作都能清空当前屏幕而不会让界面太乱;
③、设计好相应的提示语句方便用户操作;
④、在输出数据时规定数据长短以设计好布局,使得查找结果清晰明了;
⑤、设计多个函数模块来分别实现读取文件、输入信息、查找信息、修改信息等。
四、算法设计
⑴、结构体模块
typedef struct
{
char name[20];//姓名
int cla;//班级
char xingbie[5];//性别
char minzu[5];//民族
char birthday[15];//出生日期
char zhuanye[20];//专业
char address[20];//籍贯
char datein[15];//入学日期
char fadate[15];//填发日期
}STUDENTS;
⑵、输入模块
建立函数用for语句逐个输入学生信息。N-S流程图如下:
i=0 | |
i<M(M为学生总数) | |
输入第i个学生的信息 | |
i=i+1 |
⑶、修改模块
建立函数用for语句逐个查找学生学号直到找到用户想找的学生后,输出该学生的所有信息,询问并修改用户想要修改的该学生的信息。N-S流程图如下:
输入想要修改的学生的学号n | |
i=0 | |
当i<M | |
i=n是 否 | |
输出学号为n的学生的信息并修改 | |
i=i+1 |
⑷、查找模块
用for语句逐个查找所输入学号的学生的相关信息。N-S流程图如下:
输入想要查找的学生的学号n | |
i=0 | |
当i<M | |
i=n是 否 | |
输出学号为n的学生的信息 | |
i=i+1 |
⑸、统计模块
用for语句输出学生信息并以学号大小顺序排列,来达到统计所有学生信息的目的。N-S流程图如下:
i=0 | |
i<M(M为学生总数) | |
输出第i个学生的信息 | |
i=i+1 |
- 主菜单设计
*****************学生信息****************
- 修改学生信息
- 删除学生信息
- 查找学生信息
- 所有学生信息
- 退出系统
请选择
六、调试结果
以学生总数为1(即M=1)查找所有学生信息为例:
按提示输入学生信息,截图如下:
按回车键返回菜单,截图如下:
输入4后按回车键清除屏幕再显示所有学生的信息,截图如下:
七、结果分析
①、运用了结构体简化了程序;
③、菜单界面首行没有居中显得不够美观;
④、为了后面的for语句,学号定义为了整型,使得输出学号时,以0开头的学号的第一个0无法输出。
八、心得体会
此次设计的学生征信息管理系统满足课题的功能要求。但是也有很多不够完美的地方。代码有些地方过于冗长,界面不够美观等都是需要改进的地方。希望在今后更进一步的中逐渐解决这些问题。
在运用当前所学知识无法解决所遇到的问题的时候,需要充分运用课外知识。
在这次的课程实验中,花了比较长的时间,让我深刻明白了实践出真知和孰能生巧的道理。
九、源程序
/*学生证信息管理系统*/
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<stdlib.h>
#define M 1
typedef struct
{
int num;//学号
char name[20];//姓名
int cla;//班级
char xingbie[5];//性别
char minzu[5];//民族
char birthday[15];//出生日期
char zhuanye[20];//专业
char address[20];//籍贯
char datein[15];//入学日期
char fadate[15];//填发日期
}STUDENTS;
int read_file(STUDENTS student[])
{
FILE *fp;
int i=0;
if((fp=fopen("projectchoose.txt","rt"))==NULL) //判断打开文件是否
为空
{
printf("\n\n******无学生信息存在!请创建******");
return 0;
}
while(feof(fp)!=1) //判断文件是否结束
{
fread(&student[i],sizeof(STUDENTS),1,fp); //从文件中读取数据if(student[i].num==0) break;
else i++;
}
fclose(fp); //关闭文件
return i;
}
void save_file(STUDENTS student[],int sum)
{
FILE *fp;
int i;
if((fp=fopen("d:\\projectchoose.txt","wb"))==NULL) //判断打开文件是否为空
{
printf("读信息错误!\n");
return ;
}
for(i=0;i<sum;i++)
if(fwrite(&student[i],sizeof(STUDENTS),1,fp)!=1) //判断是否输入了正 确的信息
printf("写信息错误!\n");
fclose(fp); //关闭文件
}
//输入模块
int input(STUDENTS student[])
{
int i=0;
system("cls"); //清空屏幕
printf(" 输入的学生数(最多为%d个)\n",M);
printf("----------------------------------------------\n");
do
{
printf("\n 第%d个学生",i+1);
printf("\n 学生学号:");
scanf("%d",&student[i].num);
printf("\n 学生姓名:");
scanf("%s",&student[i].name);
printf("\n 学生班级:");
scanf("%d",&student[i].cla);
printf("\n 学生性别:");
scanf("%s",&student[i].xingbie);
printf("\n 学生民族:");
scanf("%s",&student[i].minzu);
printf("\n 出生日期:");
scanf("%s",&student[i].birthday);
printf("\n 学生专业:");
scanf("%s",&student[i].zhuanye);
printf("\n 学生籍贯:");
scanf("%s",&student[i].address);
printf("\n 学生的入学日期:");
scanf("%s",&student[i].datein);
printf("\n 学生证填发日期:");
scanf("%s",&student[i].fadate);
i++;
}while(i<M);
fflush(stdin);
getch();
printf("\n **********%d个学生的学生证信息输入完毕**********\n",i);
printf("\n 按回车键返回菜单!");
getchar();
return i;
}
//修改信息模块
void modify(STUDENTS student[],int sum)
{
int i=0,choice,modify_num,flag;
do
{
system("cls");
printf("\n请输入要修改的学生学号:");
scanf("%d",&modify_num);
for(i=0;i<sum;i++)
if(student[i].num==modify_num)
{
printf("\n\n -----------------------学生信息------------------------\n\n");
printf("学号 姓名 班级 性别 民族 出生日期 专业 籍贯 入学日期 填发日期\n");
printf("--------------------------------------------------------------------\n");
printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8s\n",
student[i].num,student[i].name,student[i].cla,student[i].xingbie,student[i].minzu,student[i].birthday,student[i].zhuanye,student[i].address,student[i].datein,student[i].fadate);
printf("--------------------------------------------------------------------\n");
printf("\n 您要修改哪一项?\n");
printf("\n 1.学号\n");
printf("\n 2.姓名\n");
printf("\n 3.班级\n");
printf("\n 4.性别\n");
printf("\n 5.民族\n");
printf("\n 6.出生日期\n");
printf("\n 7.专业\n");
printf("\n 8.籍贯\n");
printf("\n 9.入学日期\n");
printf("\n 10.填发时期\n");
printf("\n 请选择所需一项:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:printf("\n 请输入修改后的学号:");
scanf("%d",&student[i].num);break;
case 2:printf("\n 请输入修改后的姓名:");
scanf("%s",student[i].name);break;
case 3:printf("\n 请输入修改后的班级:");
scanf("%d",student[i].cla);break;
case 4:printf("\n 请输入修改后的性别:");
case 5:printf("\n 请输入修改后的民族:");
scanf("%s",student[i].minzu);break;
case 6:printf("\n 请输入修改后的出生日
期:");
scanf("%s",student[i].birthday);break;
case 7:printf("\n 请输入修改后的专业:");
scanf("%s",student[i].zhuanye);break;
case 8:printf("\n 请输入修改后的籍贯:");
scanf("%s",student[i].address);break;
case 9:printf("\n 请输入修改后的入学日
期:");
scanf("%s",student[i].datein);break;
case 10:printf("\n 请输入修改后的填发日
期:");
scanf("%s",student[i].fadate);break;
}
fflush(stdin); //清除缓存
getch();
printf("\n\n ***************学生信息***************
\n\n");
printf("学号 姓名 班级 性别 民族 出生日期
专业 籍贯 入学日期 填发日期\n");
printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8s\n",student[i].num,student[i].name,student[i].cla,student[i].xingbie,student[i].minzu,student[i].birthday,student[i].zhuanye,student[i].address,student[i].datein,student[i].fadate);
printf("--------------------------------------------
----\n");
break;
}
else
{
printf("\n 该学生不存在!");
getchar();
}
printf("\n 修改成功!\n\n");
printf(" 您要继续修改吗?(Y/N)\n");
choice=getchar();
if(choice=='Y'||choice=='y')
{
flag=1;
printf("\n 继续!\n");
}
else
flag=0;
}while(flag==1);
fflush(stdin); //清除缓存
getch()
printf("\n 按回车键返回主菜单!");
getchar();
}
//删除模块
void del(STUDENTS student[])
{
int i,g,sum;
int del_num;
{system("cls"); //清空屏幕
printf("\n 请输入要删除的学生的学号:");
scanf("%d",&del_num);
fflush(stdin); //清除缓存
getch();
for(i=0;i<sum;i++)
if(student[i].num==del_num)
g=i;
for(g=i;g<sum;g++)
student[g+1]=student[g];
fflush(stdin); //清除缓存
getch();
{
printf("这是您所要删除的学生信息:\n\n");
printf("学号 姓名 班级 性别 民族 出生日期
专业 籍贯 入学日期 填发日期\n\n");
printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s
%8s\n",student[i].num,student[i].name,student[i].cla,stu
dent[i].xingbie,student[i].minzu,student[i].birthday,studen
t[i].zhuanye,student[i].address,student[i].datein,student[i].
fadate);
printf("-------------------------------------------
------------------------\n");
fflush(stdin); ////清除缓存
getch();
printf("您确定要删除这个信息?\n");
printf("按回车键继续!");
getchar();
fflush(stdin); //清除缓存
getch();
printf("已成功删除信息!");
}
student[i].num=0;
}
}
//查找模块
void find(STUDENTS student[],int sum)
{
int i,find_num;
system("cls"); //清空屏幕
printf("请输入要查找的学生学号:");
fflush(stdin); //清除缓存
scanf("%d",&find_num);
for(i=0;i<sum;i++)
if(student[i].num==find_num)
{
printf("这是您要找的学生信息:\n");
printf("学号 姓名 班级 性别 民族 出生日期 专
业 籍贯 入学日期 填发日期\n");
printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8
s\n",student[i].num,student[i].name,student[i].cla,student[i].xin
gbie,student[i].minzu,student[i].birthday,student[i].zhuanye,stu
dent[i].address,student[i].datein,student[i].fadate);
printf("-----------------------------------------------
-\n");
break;
}
else
{
printf("\n ------未找到相关学生信息!按回车键返回!------");
getchar();
system("cls"); //清空屏幕
}
fflush(stdin);////清除缓存
getchar();
}
//统计模块
void sort(STUDENTS student[],int sum)
{
STUDENTS t;
int i,j,k;
system("cls");
printf("\n*******************学生信息******************** \n");
printf("\n学号 姓名 班级 性别 民族 出生日期 专业 籍
贯 入学日期 填发日期\n\n");
for(i=0;i<sum-1;i++)
{
k=1;
for(j=i+1;j<sum;j++)
if(student[k].num>student[j].num)
{
t=student[j];
student[j]=student[k];
student[k]=t;
} // 依据学号从小到大输出学生信息
}
for(i=0;i<sum;i++)
{
printf("%4d %4s %4d %4s %4s %8s %8s %8s %8s %8s\n"
,student[i].num,student[i].name,student[i].cla,student[i].xingbie,stu
dent[i].minzu,student[i].birthday,student[i].zhuanye,student[i].add
ress,student[i].datein,student[i].fadate);
}
fflush(stdin); //清除缓存
getch();
}
//主函数
void main()
{
STUDENTS student[M];
int choice,sum;
sum=read_file(student);
if(sum==0)
{
printf("\n********请输入学生基本信息!*******\n\n");
getch();
sum=input(student);
}
Do
{
system("cls");
printf("\n\n\n*********************学生的信息***************** \n\n");
printf(" 1.修改学生信息\n\n");
printf(" 2.删除学生信息\n\n");
printf(" 3.查找学生信息\n\n");
printf(" 4.所有学生的信息\n\n");
printf(" 0.退出系统\n\n");
printf(" 请选择\n\n");
scanf("%d",&choice);
switch(choice)
{
case 1: modify(student,sum);break;
case 2: del(student); break;
case 3: find(student,sum); break;
case 4: sort(student,sum); break;
case 0: break;}
}
while(choice!=0);
save_file(student,sum);
}