功能: 输入若干个学生信息(比如:学号,姓名及三门课成绩),能实现学生信息的录入、查询、插入、排序等功能。
要求: 用数据文件保存学生信息。利用菜单可以循环完成各个操作。
进一步要求: 能够实现对成绩的修改更好。(文件函数 、结构数组,排序等)
输入学生数据存放在“stu.dat”文件中,不能输入重复的学号,否则将会判断重复,要求重新输入,但第二次必须输入正确,会直接录入文件“stu.dat”,排序之后的数据存放在“stu.sort”中,修改可按照学号和姓名修改,若有姓名重复的同学,自动修改学号的学生信息。修改是全部读出再录入,而不是覆盖写入,覆盖写入还没有学会。代码还有问题,就不公布了
编辑器:DevC++
# include <stdio.h>
# include<stdlib.h>
# include<string.h>
# define N 100
# define Swap {k=s[i];s[i]=s[min];s[min]=k;}
typedef struct student
{
char num[20];
char name[20];
float score1;
float score2;
float score3;
float aver;
float sum;
}stu;
int main()
{
void input();
void search();
void output();
void insert();
void sort();
void swap();
void update();
int n;
while(1)
{
printf(" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n");
printf("\n");
printf(" ◆◆◆◆◆学生成绩管理系统◆◆◆◆◆◆◆\n");
printf(" ◆ 菜单 ◆\n");
printf(" ◆ 选项1:输入 ◆\n");
printf(" ◆ 选项2: 查找 ◆\n");
printf(" ◆ 选项3:输出 ◆\n");
printf(" ◆ 选项4:插入 ◆\n");
printf(" ◆ 选项5:排序 ◆\n");
printf(" ◆ 选项6:修改 ◆\n");
printf(" ◆ 选项0:退出 ◆\n");
printf(" ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ◆\n");
printf("\n");
printf(" 执行操作:");
scanf("%d",&n);
switch(n)
{
case 1: input();break;
case 2: search();break;
case 3: output();break;
case 4: insert();break;
case 5: sort();break;
case 6:update();break;
case 0: exit(0);break;
default: printf("\n 输入错误\n\n");break;
}
}
}
/*
// 用数据文件保存学生成绩信息(不能判断学号是否重复
void input()
{
stu s[N];
int i,n;
printf("输入学生个数:\n");
scanf("%d",&n);
FILE *fp;
fp=fopen("stu.dat","a+"); //要考虑覆盖问题
if (fp==NULL)
{
printf("Can't open the file %s.\n","stu.date");
exit(0);
}
printf("输入学生信息:\n");
printf("学号姓名 英语 数学 C语言\n");
for(i=0;i<n;i++)
{
scanf("%s%s%f%f%f",s[i].num,s[i].name,&s[i].score1,&s[i].score2,
&s[i].score3);
}
//fprintf(fp," 学号 名字 英语 数学 C语言 平均分 总分\n");
for (i=0;i<n;i++)
{
s[i].sum=s[i].score1+s[i].score2+s[i].score3;
s[i].aver=(s[i].sum)/3;
fprintf(fp,"%10ld %10s %8.2f %8.2f %8.2f%8.2f %8.2f\n",s[i].num,s[i].name,
s[i].score1,s[i].score2,
s[i].score3,s[i].aver,
s[i].sum);
}
fclose(fp);
}*/
// 用数据文件保存学生成绩信息
void input()
{
stu s[N],a[N],t,w[N]; //a[N]为文件中的,s[N]为输入的学生信息
int i,n,j,k=0,flag=0;
printf("输入学生个数:\n");
scanf("%d",&n);
FILE *fp;
fp=fopen("stu.dat","r");
if (fp==NULL)
{
fclose(fp);
fp=fopen("stu.dat","a+"); //要考虑覆盖问题
if (fp==NU