當前位置:編程學習大全網 - 編程語言 - c語言程序改動

c語言程序改動

#include <stdio.h>#include <stdlib.h> #include <string.h>const int MAX = 1000;const int MAXGRDS = 3; // 課程數struct course { char cname[60]; double score;};struct Student { //定義學生的結構體 char name[30]; int id; // 學號 struct course grades[MAXGRDS]; // }S[MAX];int Student_Count = 0; //將學生數的初始值設為0void Interface(); int AddStudent(); int DelStudent(); void CheckStudent(); void CheckClass(); void CheckFile();void WriteFile(); void ReadFile(); void main() { int choice; while(1) { Interface(); scanf("%d%*c",&choice); //"%*c"是吸收回車的,因為後面會輸入字母類型 switch(choice) { case 0 : return; case 1 : if(AddStudent()) printf("添加成功,回車繼續\n"); else printf("添加失敗,回車繼續\n"); getchar(); break; case 2 : if(DelStudent()) printf("刪除成功,回車繼續\n"); else printf("刪除失敗,回車繼續\n"); getchar(); break; case 3 : CheckStudent(); break; case 4 : CheckClass(); break; case 5 : WriteFile(); break; case 6 : ReadFile(); break; default : printf("選擇錯誤。\n"); break; } }}void Interface() { printf("\t -------------------------- \n"); printf("\t| 1、添加 |\n") printf("\t| |\n"); printf("\t| 2、刪除 |\n"); printf("\t| |\n"); printf("\t| 3、查學生成績 |\n"); printf("\t| |\n"); printf("\t| 4、查班成績表 |\n"); printf("\t| |\n"); printf("\t| 5、寫入文本文件 |\n"); printf("\t| |\n"); printf("\t| 6、讀取文本文件 |\n"); printf("\t| |\n"); printf("\t| 0、退出 |\n"); printf("\t -------------------------- \n"); printf("\t選擇操作:");}int AddStudent() { int j,i = Student_Count; if(Student_Count >= MAX) return 0; printf("學號:"); scanf("%d", &S[i].id); fflush(stdin); printf("姓名:"); gets(S[i].name); for(j = 0; j < MAXGRDS; ++j) { printf("(%d/%d)課程名:",j + 1,MAXGRDS); gets(S[i].grades[j].cname); printf("(%d/%d)成績:",j + 1,MAXGRDS); scanf("%lf", &S[i].grades[j].score); } ++Student_Count; return 1;}int DelStudent() { char name[30]; int id,i,j,an,flag = 1; do { printf("1、按姓名刪除\n2、按學號刪除\n請選擇:"); scanf("%d",&an); if(an < 1 && an > 2) printf("輸入錯誤。\n"); }while(an < 1 && an > 2); if(an == 1) { printf("學生姓名:"); fflush(stdin); gets(name); for(i = 0; i < Student_Count && flag; ++i) { if(strcmp(name,S[i].name) == 0) { for(j = i; j < Student_Count - 1; ++j) S[j] = S[j + 1]; --Student_Count; flag = 0; } } if(flag) { printf("沒有找到姓名是:%s的學生。刪除失敗!\n",name); return 0; } } else { printf("學生學號:"); scanf("%d",&id); for(i = 0; i < Student_Count; i++) { if(id == S[i].id) { for(j = i; j < Student_Count - 1; ++j) S[j] = S[j + 1]; --Student_Count; flag = 0; } } if(flag) { printf("沒有找到學號是:%d的學生。刪除失敗!\n",id); return 0; } } return 1; } void CheckStudent() { int i,j,id,an,flag = 1; char name[30]; do { printf("1、按姓名查找\n2、按學號查找\n請選擇:"); scanf("%d",&an); if(an < 1 && an > 2) printf("輸入錯誤。\n"); }while(an < 1 && an > 2); if(an == 1) { fflush(stdin); printf("姓名:"); gets(name); for(i = 0; i < Student_Count; i++) { //全部窮舉,防止同名同姓 if(!strcmp(S[i].name, name) == 0) { flag = 0; printf("學號:%d\t姓名:%s\n",S[i].id, S[i].name); for(j = 0; j < MAXGRDS; ++j) printf("%s:%.2lf\n",S[i].grades[j].cname,S[i].grades[j].score); } } if(flag) printf("沒有找到姓名是 %s 的學生。\n",name); } else { printf("學號:"); scanf("%d",&id); for(i = 0; i < Student_Count && flag; i++) { if(S[i].id == id) { printf("學號:%d\t姓名:%s\n",S[i].id, S[i].name); for(j = 0; j < MAXGRDS; ++j) printf("%s:%.2lf\n",S[i].grades[j].cname,S[i].grades[j].score); flag = 0; } } if(flag) printf("沒有找到學號是 %d 的學生。\n",id); }}void CheckClass() { char cname[60]; double SSNum = 0, PassSNum = 0, SMark = 0; int i,j; fflush(stdin); printf("請輸入課程名稱:"); gets(cname); printf("學號\t姓名\t課程名稱\t課程成績\t課程學分\n"); printf("----------------------------------------------------\n"); for(i = 0; i < Student_Count; i++) { for(j = 0; j < MAXGRDS; j++) { if(strcmp(S[i].grades[j].cname,cname) == 0) { printf("%d\t%s\t%s\t%.2lf\n",S[i].id,S[i].name,S[i].grades[j].cname,S[i].grades[j].score); printf("----------------------------------------------------\n"); SMark += S[i].grades[j].score; SSNum ++; if(S[i].grades[j].score >= 60) PassSNum++; } } } if(SSNum) printf("\n平均分:%.2lf\t及格率:%.2lf%%\n\n", SMark / SSNum, PassSNum / SSNum * 100); printf("\n查找完畢...回車繼續\n"); getchar();}void WriteFile() { FILE *fp; int i; char path[100]; printf("請輸入寫入的文件地址:"); fflush(stdin); gets(path); if((fp = fopen(path,"wb")) == NULL) { //寫入文件 printf("不能打開文件:%s\n",path); printf("寫文件失敗!\n"); return; } for(i = 0; i < Student_Count; ++i) fwrite(&S[i],sizeof(struct Student),1,fp); fclose(fp); printf("\n寫入完成...回車繼續\n"); getchar();}void ReadFile() { FILE *fp; int n = 0; char path[100]; printf("請輸入讀取的文件地址:"); fflush(stdin); gets(path); if((fp = fopen(path,"rb")) == 0) { printf("不能打開文件:%s\n",path); printf("讀文件失敗!\n"); return; } while(fread(&S[n++],sizeof(struct Student),1,fp) == 1); Student_Count = n; fclose(fp); printf("\n讀取成功...回車繼續\n"); getchar();}

  • 上一篇:IoT第三層:平臺層企業
  • 下一篇:chatbot思維杯對程序員有什麽沖擊嗎?
  • copyright 2024編程學習大全網