|
25鱼币
保存功能可以运行使用,但读取时候只能读取出学号和姓名,没法读取出成绩#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAX_COUNT 100
typedef struct
{
char num[20];//学号
char name[20];//姓名
float score_yuwen;//语文成绩
float score_shuxue;//数学成绩
float score_yingyu;//英语成绩
float score_wuli;//物理成绩
float score_huaxue;//化学成绩
} Student;
Student stu[MAX_COUNT];
int total=0;
void clear_enter()
{ //清理回车
char mistake[20];
gets(mistake);
}
void return_menu()
{
printf("按回车键返回主菜单...\n");
clear_enter();
}
void add_Student()
{ //录入学生信息
int i;
printf("请输入学生成绩信息:\n");
printf("学号 姓名 语文 数学 英语 物理 化学\n");
scanf("%s%s%f%f%f%f%f",stu[total].num,stu[total].name,&stu[total].score_yuwen,&stu[total].score_shuxue,&stu[total].score_yingyu,&stu[total].score_wuli,&stu[total].score_huaxue);
clear_enter();
printf("学生成绩信息录入中...\n");
sleep(1);
printf("学生成绩信息已录入\n");
total++;
}
void show_student()
{ //展示查看学生信息
int i;
printf("学号 姓名 语文 数学 英语 物理 化学\n");
for(i=0; i<total; i++)
{
printf("%s %s %.f %.f %.f %.f %.f\n",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);
}
}
void search_name() { //根据姓名查找学生成绩信息
int i;
char name[20];
system("cls");
printf("请输入要查询的学生的姓名:");
scanf("%s",&name);
for(i=0; i<total; i++)
{
if(strcmp(name,stu[i].name)==0)
{
printf("学号;%s\n",stu[i].num);
printf("姓名;%s\n",stu[i].name);
printf("语文;%.f\n",stu[i].score_yuwen);
printf("数学;%.f\n",stu[i].score_shuxue);
printf("物理;%.f\n",stu[i].score_wuli);
printf("化学;%.f\n",stu[i].score_huaxue);
} else
printf("学生姓名不存在...\n");
clear_enter();
}
}
void search_num()
{ //根据学号查找学生成绩信息
char num[20];
int j;
system("cls");
printf("请输入要查询的学生的学号:");
scanf("%s",&num);
for(j=0; j<total; j++)
{
if(strcmp(num,stu[j].num)==0)
{
printf("学号;%s\n",stu[j].num);
printf("姓名;%s\n",stu[j].name);
printf("语文;%.f\n",stu[j].score_yuwen);
printf("数学;%.f\n",stu[j].score_shuxue);
printf("英语:%.f\n",stu[j].score_yingyu);
printf("物理;%.f\n",stu[j].score_wuli);
printf("化学;%.f\n",stu[j].score_huaxue);
}
else
{
printf("学生学号不存在:\n");
}
}
clear_enter();
}
void search_student()
{
int i;
system("cls");
printf("1按姓名查找:\n");
printf("2按学号查找: \n");
scanf("%d",&i);
switch(i)
{
case 1: {
search_name();
break;
}
case 2: {
search_num();
break;
}
}
}
void change_student()
{
int i;
printf("输入要修改信息的学生学号:\n");
char num[20];
scanf("%s",&num);
for(i=0; i<total; i++)
if(strcmp(num,stu[i].num)==0) {
while(i<total) {
stu[i]=stu[i+1];
i++;
}
total-=1;
}
printf("请输入新的学生成绩信息:\n");
printf("学号 姓名 语文 数学 英语 物理 化学\n");
scanf("%s%s%f%f%f%f%f",stu[total].num,stu[total].name,&stu[total].score_yuwen,&stu[total].score_shuxue,&stu[total].score_yingyu,&stu[total].score_wuli,&stu[total].score_huaxue);
clear_enter();
printf("学生成绩信息修改中...\n");
sleep(1);
printf("修改成功\n");
total++;
}
void del_student()
{ //根据学号删除学生成绩信息
int i;
printf("输入要删除信息的学生学号:\n");
char num[20];
scanf("%s",&num);
for(i=0; i<total; i++)
if(strcmp(num,stu[i].num)==0) {
while(i<total) {
stu[i]=stu[i+1];
i++;
}
total-=1;
}
clear_enter();
printf("学生成绩正在删除\n");
sleep(1);
printf("学生成绩已删除\n");
}
void num_sort()
{ //按学生学号进行排序
int i,j;
Student stu_temp;
for(i=0; i<total; i++)
{
for(j=0; j<total-1-i; j++)
{
if(stu[j].num>stu[j+1].num)
{
stu_temp=stu[j];
stu[j]=stu[j+1];
stu[j+1]=stu_temp;
}
}
}
printf("排序后的结果:\n");
printf("学号 姓名 语文 数学 英语 物理 化学\n");
for(i=0; i<total; i++)
{
printf("%s %s %.f %.f %.f %.f %.f\n",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);
}
}
void save_student()
{
system("cls");
int i,n;
FILE *fp;
if ((fp = fopen("chengji.txt", "wb")) == NULL)
{
printf("无法打开学生信息文件!\n");
exit(1);
}
printf("\n正在保存...\n");
fprintf(fp, "%d",total);
fprintf(fp, "\r\n");
for (i = 0; i <total; i++)
{
fprintf(fp, "%s %s %.f %.f %.f %.f %.f",stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);
fprintf(fp, "\r\n");
}
fclose(fp);
Sleep(1);
system("cls");
printf("*****保存成功*****\n");
}
void load_student()
{
int i;
FILE *fp;
system("cls");
if ((fp = fopen("chengji.txt", "rb")) ==NULL)
{
printf("无法打开学生信息文件!\n");
exit(1);
}
fscanf(fp, "%d", &total);
for (i = 0; i <total; i++)
{
fscanf(fp, "%s %s %.1f %.1f %.1f %.1f %.1f", stu[i].num,stu[i].name,stu[i].score_yuwen,stu[i].score_shuxue,stu[i].score_yingyu,stu[i].score_wuli,stu[i].score_huaxue);
}
fclose(fp);
system("cls");
printf("成功加载学生信息到内存中!\n");
return;
}
void menu()
{
system("color b9");
printf("-------------学生成绩管理系统-------------\n");
printf(" 1.增加学生成绩信息 \n");
printf(" 2.查看学生成绩信息 \n");
printf(" 3.修改学生成绩信息 \n");
printf(" 4.删除学生成绩信息 \n");
printf(" 5.查找学生成绩信息 \n");
printf(" 6.对学生信息进行排序 \n");
printf(" 7.保存学生信息为文件 \n");
printf(" 8.从文件中读取学生信息 \n");
printf(" 9.退出系统 \n");
printf(" \n");
printf("请输入您的选择[1-9]并按回车");
return;
}
int main()
{
char tmp[20];
while(1) {
system("cls");
menu();
int sel;
scanf("%d",&sel);
gets(tmp);
switch(sel) {
case 1:
{
add_Student();
break;
}
case 2:
{
show_student();
break;
}
case 3:
{
change_student();
break;
}
case 4:
{
del_student();
break;
}
case 5:
{
search_student();
break;
}
case 6:
{
num_sort();
break;
}
case 7:
{
save_student();
break;
}
case 8:
{
load_student();
break;
}
case 9:
{
printf("退出系统");
exit(0);
}
}
printf("按任意键回车继续...\n");
gets(tmp);
}
return 0;
}
load_student()函数中fscanf不对,改成: fscanf(fp, "%s %s %f %f %f %f %f", stu[i].num, stu[i].name, &stu[i].score_yuwen, &stu[i].score_shuxue, &stu[i].score_yingyu, &stu[i].score_wuli, &stu[i].score_huaxue);
%f输入时不能指定精度,另外忘加地址符了。
|
最佳答案
查看完整内容
load_student()函数中fscanf不对,改成:
%f输入时不能指定精度,另外忘加地址符了。
|