|
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输入时不能指定精度,另外忘加地址符了。
|