是上一篇的延续 上一篇放出的是原先的代码
已经根据建议改动 以下是改动后的代码
改变内容是
1: fopen变为fopen_s
2:文件中斜杠换了方向
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
#define N 1000;
int n, num = 0;
void query();//查询函数//
void xiugai();//修改函数//
void output();//输出函数//
void input();//输入函数//
void count();//读取文件//
void tuichu();//退出函数//
void menu();//菜单函数//
void deletee();//删除函数//
void ave();//求全班平均值函数//
//学生结构体//
struct student
{
char name[10]; //姓名
int number[10]; //学号
float chinese; //语文成绩
float math; //数学成绩
float english; // 英语成绩
float ave;//成绩平均值
float sum;
} stu[1];
void count()
{
FILE* fp; //定义文件指针fp//
fp = fopen_s(&fp,"C:/hi/students.doc", "at+"); //以“追加”方式打开students文本文件//
if (fp == NULL) //判断文件是否为空//
printf("Cannot open file!");
struct student stu1;
n = 0; //初始化//
while (1)
{
if (feof(fp)) //检测文件是否结束//
break;
fread(&stu1, sizeof(struct student), 1, fp); //读取文件//
n++;
}
n--;
fclose(fp); //关闭文件//
}
void menu() // 菜单 //
{
int i;
system("cls");
printf("\t\t欢迎进入学生信息管理系统\n");
printf("\t\t================================\n");
printf("\t\t***** 请择操作序号: *****\n");
printf("\t\t* 1 输入学生信息 *\n");
printf("\t\t* 2 输出学生信息 *\n");
printf("\t\t* 3 修改学生信息 *\n");
printf("\t\t* 4 查询学生信息 *\n");
printf("\t\t* 5 删除学生信息 *\n");
printf("\t\t* 6 查看班级平均分 *\n");
printf("\t\t* 0 退出 *\n");
printf("\t\t================================\n");
scanf_s("%d\n", &i);
system("cls");
count();
switch (i)
{
case 0:tuichu(); break; //退出系统//
case 1:input(); break; //输入学生信息//
case 2:output(); break; //输出学生信息//
case 3:xiugai(); output(); break; //修改学生信息//
case 4:query(); break; //查询学生信息//
case 5:deletee(); break;//删除学生信息//
case 6:ave(); break;//班级平均分//
default:
printf("输入错误\n"); //错误纠正//
}
}
void input() //成绩输入//
{
int i = 0, sum;
char c;
FILE* fp;
count();
printf("请输入学生的人数:\n");
scanf_s("%d\n", &sum);
fp = fopen_s(&fp, "C:/hi/students.doc", "at+");
for (i = 0; i < sum; i++, n++)
{
printf("输入学生学号\n");
scanf_s("%d\n", &stu[i].number);
printf("输入学生姓名\n");
scanf_s("%s\n", &stu[i].name); getchar();
printf("输入学生语文成绩\n");
scanf_s("%f\n", &stu[i].chinese);
printf("输入学生数学成绩\n");
scanf_s("%f\n", &stu[i].math);
printf("输入学生英语成绩\n");
scanf_s("%f\n", &stu[i].english);
stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
fwrite(&stu[i], sizeof(struct student), 1, fp);
}
fclose(fp);
printf("录入成绩成功!\n");
system("cls");
}
void output() // 输出 //
{
int i;
FILE* fp;
fp = fopen_s(&fp, "C:/hi/students.doc", "rt"); //读取打开students//
system("cls"); //清屏//
printf("请输入\n");
printf("|*学号---姓名---大学语文----大学数学----大学英语----总成绩----平均分*| \n");
for (i = 0; i < n; i++)
{
fread(&stu[i], sizeof(struct student), 1, fp);
printf("%12d", stu[i].number);
printf("%12s", stu[i].name);
printf("%10.1f", stu[i].chinese);
printf("%10.1f ", stu[i].math);
printf("%10.1f ", stu[i].english);
printf("%10.1f", stu[i].sum);
printf("%10.1f ", stu[i].ave);
printf("\n");
}
fclose(fp); //关闭文件//
}
void xiugai() //修改//
{
int i, tp, num;
FILE* fp;
printf("请输入要修改学生的学号:");
scanf_s("%d\n", &num);
for (i = 0; i < n; i++)
{
if (n == *stu[i].number)
{
printf("要修改的学生信息为:\n");
printf("学号\t姓名\t大学语文成绩\t大学数学成绩\t大学英语成绩\t总成绩\t平均分\n");
printf("%12d", num);
printf("%12s", stu[i].name);
printf("%10.1f", stu[i].chinese);
printf("%10.1f ", stu[i].math);
printf("%10.1f", stu[i].sum);
printf("%10.1f ", stu[i].ave);
printf("\n");
do {
printf("请选择要修改的内容:\n");
printf("1学号\n2姓名\n3大学语文成绩\n4大学数学成绩\n5大学英语成绩\n");
scanf_s("%d", &tp);
switch (tp)
{
case 1:
printf("请输入学号:\n");
scanf_s("%d", &stu[i].number);
break;
case 2:
printf("请输入姓名:\n");
scanf_s("%s", &stu[i].name);
break;
case 3:
printf("请输入大学语文成绩:\n");
scanf_s("%f", &stu[i].chinese);
stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
break;
case 4:
printf("请输入大学数学成绩:\n");
scanf_s("%f", &stu[i].math);
stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
break;
case 5:
printf("请输入大学英语成绩:\n");
scanf_s("%f", &stu[i].english);
stu[i].sum = stu[i].chinese + stu[i].math + stu[i].english;
stu[i].ave = (stu[i].chinese + stu[i].math + stu[i].english) / 3;
break;
}
} while (tp < 6);
}
}
fp = fopen_s(&fp, "C:\hi\students.doc", "w+"); //以写方式打开students//
for (i = 0; i < n; i++)
fwrite(&stu[i], sizeof(struct student), 1, fp);
fclose(fp); //关闭文件//
}
void query()// 查找 //
{
int i, n;
FILE* fp;
char c3;
fp = fopen_s(&fp, "C:/hi/students.doc", "rt"); //读取打开students//
system("cls"); //清屏//
printf("请输入学生的学号:");
scanf_s("%d", &n);
for (i = 1;; i++)
{
if (n == *stu[i].number)
{
fread(&stu[i], sizeof(struct student), 1, fp);
printf("该学生学号为%d\n", i);
printf_s("该学生的大学语文成绩为:%10.1f\n", stu[i].chinese);
printf_s("大学数学成绩为:%10.1f\n", stu[i].math);
printf_s("大学英语成绩为:%10.1%f\n", stu[i].english);
printf_s("平均分为:%10.1f\n", stu[i].ave);
}
printf("\n\n\t\t是否继续(Y/N):");
scanf_s("%s", &c3);
c3 = getchar();
if (c3 == 'Y')
fclose(fp); //关闭文件//
}
}
void deletee() //删除//
{
int i, n;
char c4;
FILE* fp;
fp = fopen_s(&fp, "C/hi/students.doc", "w+");
printf("请输入你要删除学生的学号:\n");
scanf_s("%d\n", &n);
for (i = 0;; i++)
{
if (n == *stu[i].number)
{
printf("确认删除学号为%d学生的成绩?\n", n);
printf("Y or N\n");
c4 = getchar();
if (c4 == 'Y')
{
for (i = 1;; i++)
stu[i] = stu[i + 1];
}num--;
}
else printf("输入错误!学生不存在!\n");
}
fclose(fp);
system("cls"); //清屏//
}
void ave()//全班平均分//
{
int i, n, sum;
float C = 0, M = 0, E = 0;//表示语文 数学 英语 的总分//
printf("输入学生人数:\n");
scanf_s("%d\n", &sum);
FILE* fp;
fp = fopen_s(&fp, "C:/hi/students.doc", "rt"); //读取打开students//
system("cls"); //清屏//
for (i = 0; i <= sum; i++)
{
C = stu[i].chinese + C;
M = stu[i].math + M;
E = stu[i].english + E;
}
printf("全班语文成绩平均值为:%10.1d\n", C / sum);
printf("全班数学成绩平均值为:%10.1d\n", M / sum);
printf("全班英语成绩平均值为:%10.1d\n", E / sum);
fclose(fp);
system("cls"); //清屏//
}
void tuichu() //退出//
{
char c;
system("cls");
printf("\n\t 感谢使用");
getchar();
c = getchar();
}