一、题目分析
构造一个学生信息管理系统应包含添加、删除、查找、修改等基本功能,设计不同的函数实现各项功能,可以将学生信息存放在一个结构体数组里,实现添加功能则按照顺序向结构体数组赋值,删除则遍历数组找到要删除的学生的学号然后删除该学生的信息,查找则遍历数组找到所要找的学生信息,修改则建立在查找的基础上找到所要找的学生信息后进行重新赋值操作。在主函数中使用switch语句操作各功能函数,用户则根据选择完成想要的操作。
二、算法构造
在此程序中所要执行的功能有添加、删除、查找、修改,实现这些基本功能其实都是找到需要操作的结构体数组中的某一项或者某些项进行操作,所以在此只列出修改功能的算法代码以及流程图。
void modify() /*修改信息*/
{
void sort();
int i,item,num,j;
char sex1[LEN],s1[LEN+1],s2[LEN+1]; /* 以姓名和学号最长长度+1为准*/
float score1;
printf("请输入要修改的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(student[i].code,s1)==0) /*比较字符串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改性别\n");
printf("4.修改C语言成绩\n");
printf("5.修改高等数学成绩\n");
printf("6.修改大学英语成绩\n");
printf("7.退出本菜单\n");
printf("------------------\n");
while(1)
{
printf("请选择子菜单编号:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("请输入新的姓名:\n");
scanf("%s",s2);
strcpy(student[num].name,s2);break;
case 2:
printf("请输入新的年龄:\n");
scanf("%d",&student[num].age);break;
case 3:
printf("请输入新的性别:\n");
scanf("%s",sex1);
strcpy(student[num].sex,sex1); break;
case 4:
printf("请输入新的C语言成绩:\n");
scanf("%f",&score1);
student[num].score[0]=score1; break;
case 5:
printf("请输入新的高等数学成绩:\n");
scanf("%f",&score1);
student[num].score[1]=score1; break;
case 6:
printf("请输入新的大学英语成绩:\n");
scanf("%f",&score1);
student[num].score[2]=score1; break;
case 7:sort(); return;
default:printf("请在1-7之间选择\n");
}
}
}
流程图如下所示:
三、程序实现
#include<stdio.h> /*I/O函数*/
#include<stdlib.h> /*其它说明*/
#include<string.h> /*字符串函数*/
#define LEN 15 /* 学号和姓名最大字符数,实际请更改*/
#define N 500 /* 最大学生人数,实际请更改*/
int k=1,n=0, m=0;/* n代表当前记录的学生人数*/
struct Student
{
char code[LEN]; /* 学号*/
char name[LEN]; /* 姓名*/
int age; /* 年龄*/
char sex[LEN]; /* 性别*/
float score[3]; /* 3门课程成绩*/
}student[N];
void seek();
void modify();
void insert();
void del();
void display();
void menu();
void shuaxin();
void baocuo();
int main()
{
while(k)
{
menu();
}
system("pause");
return 0;
}
void shuaxin() //实现刷新功能读取文件中的学生信息
{
FILE *fp;
if((fp=fopen("student.txt","r"))==NULL)
{
printf("打开文件失败\n");
exit(0);
}
for(int i=0;fscanf(fp,"%s %s %d %s %f %f %f",student[i].code,student[i].name,&student[i].age,student[i].sex,
&student[i].score[0],&student[i].score[1],&student[i].score[2])==7;)
{
i++;
}
n=i;
fclose(fp);
}
void baocu