完善学生信息管理系统
实验步骤:
- 需求分析:
(1)改写程序为良好程序风格(文档注释,函数注释,语句注释)。
(2)将功能补充完全(基于文件处理,完成刷新和保存功能)。
(3)将学生信息改为更好的数据组织,而非离散形式(结构体)。 - 概要设计
流程图如下:
N-S盒图如下:(查询部分)
3. 主要模块实现
#define LEN 15 /* 学号和姓名最大字符数,实际请更改*/
#define N 50 /* 最大学生人数,实际请更改*/
struct record{
char code[LEN]; /* 学号*/
char name[LEN]; /* 姓名*/
int age; /* 年龄*/
char sex[LEN]; /* 性别*/
float score[3]; /* 3门课程成绩*/
}stu[N];
int k = 1, n = 0, m = 0;//定义全局变量。 n代表当前记录的学生人数
void help();
void update();
void seek();
void modify();
void sort();
void insert();
void del();
void display();
void save();
void menu();
int main()
{
while (k)
{
menu();
}
system("pause");
return 0;
}
void help()//帮助
{
printf("\n0.欢迎使用系统帮助!\n");
printf("\n1.初次进入系统后,请先选择增加学生信息;\n");
printf("\n2.按照菜单提示键入数字代号;\n");
printf("\n3.增加学生信息后,切记保存;\n");
printf("\n4.谢谢您的使用!\n");
}
void update(){
//更新信息,从文件读入信息
save();
FILE *fp; //文件指针
int x = 0;
if ((fp = fopen("in.txt", "r")) == NULL) {
system("pause"); return; }
for (x = 0; x <= n; x++){
fscanf(fp, "%s %s %d %s %f %f %f", stu[x].code, stu[x].name, &stu[x].age, stu[x].sex,
&stu[x].score[0], &stu[x].score[1], &stu[x].score[2]);
}
printf("更新完毕!\n");
fclose(fp);
printf("更新后...\n");
display();
}
void seek() //查找
{
int i, item, flag;//item代表选择查询的子菜单编号,flag表示是否查找成功
char s1[21]; /* 以姓名和学号最长长度+1为准*/
printf("------------------\n");
printf("-----1.按学号查询-----\n");
printf("-----2.按姓名查询-----\n");
printf("-----3.退出本菜单-----\n");
printf("------------------\n");
while (1)
{
printf("请选择子菜单编号:");
scanf("%d", &item);
flag = 0;
switch (item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s", s1);
for (i = 0; i<n; i++)
if (strcmp(stu[i].code, s1) ==