當前位置:編程學習大全網 - 編程語言 - 用C語言編壹個成績記錄簿

用C語言編壹個成績記錄簿

#include?<stdio.h>

#include?<stdlib.h>

#include?<string.h>

#define?MAX?1000

typedef?struct?Lesson?//定義課程結構體

{

int?Lesson_Num;

char?Lesson_Name[50];

int?Lesson_Mark;

int?Lesson_Credit;

}Lesson;

typedef?struct?Student?//定義學生的結構體

{

char?Name[50];

int?Num;

int?Lesson_Count;

Lesson?L[20];

}Student;

Student?S[MAX];

static?int?Student_Count?=?0;?//記錄學生數的變量

void?PrintInterface();?//打印界面

int?AddStudent();?//添加,帶返回值,提示操作成功

int?DelStudent();?//刪除,帶返回值,提示操作成功

void?CheckStudent();?//查學生成績

void?CheckClass();?//查班成績表

void?WriteFile();?//寫入文本文件

void?ReadFile();?//讀取文本文件

void?main()

{

int?Choice;

while?(1)

{

PrintInterface();

scanf("%d%*c",?&Choice);?//"%*c"是吸收回車的,因為後面會輸入字母類型

if?(Choice?>=?0?&&?Choice?<=?6)?//選擇操作合法

{

switch?(Choice)

{

case?0:?exit(1);

case?1:

{

system("cls");

if?(AddStudent())?printf("\n添加成功...回車繼續\n");

else?printf("\n添加失敗...回車繼續\n");

getchar();

getchar();

system("cls");

break;

}

case?2:

{

system("cls");

if?(DelStudent())?printf("\n刪除成功...回車繼續\n");

else?printf("\n刪除失敗...回車繼續\n");

getchar();

getchar();

system("cls");

break;

}

case?3:

{

system("cls");

CheckStudent();

system("cls");

break;

}

case?4:

{

system("cls");

CheckClass();

system("cls");

break;

}

case?5:?WriteFile();system("cls");break;

case?6:?ReadFile();system("cls");break;

default:;

}

}

else

{

printf("無此功能..重新選擇..回車確定\n");?//選擇操作非法

getchar();

system("cls");?//清屏函數

}

}

}

void?PrintInterface()

{

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?S_count,?i,?j;

printf("\n添加中......\n");

printf("\n添加學生人數(如1、2?……999):");

scanf("%d",?&S_count);

if?(Student_Count?+?S_count?>=?MAX)?return?0;?//超過了數組上限

for?(i?=?Student_Count;?i?<?Student_Count?+?S_count;?i++)

{

printf("\n\t第%d個學生:\n",?i?-?Student_Count?+?1);

printf("\n\t學生學號:");?scanf("%d%*c",?&S[i].Num);

printf("\n\t學生姓名:");?gets(S[i].Name);

printf("\n\t該學生所修課程數:");?scanf("%d",?&S[i].Lesson_Count);

for?(j?=?0;?j?<?S[i].Lesson_Count;?j++)

{

printf("\n\t第%d門課:\n",?j?+?1);

printf("\n\t\t課程編號:");?scanf("%d%*c",?&S[i].L[j].Lesson_Num);

printf("\n\t\t課程名稱:");?gets(S[i].L[j].Lesson_Name);

printf("\n\t\t課程成績:");?scanf("%d",?&S[i].L[j].Lesson_Mark);

printf("\n\t\t課程學分:");?scanf("%d",?&S[i].L[j].Lesson_Credit);

if?(S[i].L[j].Lesson_Mark?<?60)?S[i].L[j].Lesson_Credit?=?0;?//不及格的課程學分為0

}

}

Student_Count?+=?S_count;

return?1;

}

int?DelStudent()

{

char?*D_Name;

int?D_Num;

int?i,?j;

printf("\n填寫待刪除學生的信息:\n");

printf("\n學生姓名:");?gets(D_Name);

printf("\n學生學號:");?scanf("%d",?&D_Num);

for?(i?=?0;?i?<?Student_Count;?i++)

{

if?(!strcmp(S[i].Name,?D_Name)?&&?S[i].Num?==?D_Num)

{

printf("\n找到該學生,刪除中......\n");

for?(j?=?i?+?1;?j?<?Student_Count;?j++)

{

S[j?-?1]?=?S[j];

}

break;

}

}

if?(i?==?Student_Count)

{

printf("\n未找到該學生...請核對所填信息\n\n");

return?0;

}

else

{

Student_Count--;

return?1;

}

}

void?CheckStudent()

{

int?C_Choice;

char?C_Name[50];

int?C_Num;

int?i,?j;

printf("\n輸入所查學生信息(1.姓名?\\?2.學號)選擇:");

scanf("%d%*c",?&C_Choice);

printf("\n查找中......\n");

if?(C_Choice?==?1?||?C_Choice?==?2)?//選擇合法

{

if?(C_Choice?==?1)

{

printf("\n姓名:");?gets(C_Name);

for?(i?=?0;?i?<?Student_Count;?i++)?//全部窮舉,防止同名同姓

{

if?(!strcmp(S[i].Name,?C_Name))

{

printf("\n學號:%d\t姓名:%s\n",?S[i].Num,?S[i].Name);

printf("\n課程編號\t課程名稱\t課程成績\t課程學分\n");

printf("-----------------------------------------------------\n");

for?(j?=?0;?j?<?S[i].Lesson_Count;?j++)

{

printf("%d\t\t%s\t\t%d\t\t%d\n",?S[i].L[j].Lesson_Num,

S[i].L[j].Lesson_Name,?S[i].L[j].Lesson_Mark,

S[i].L[j].Lesson_Credit);

printf("-----------------------------------------------------\n");

}

printf("\n\n");

}

}

}

else

{

printf("\n學號:");?scanf("%d%*c",?&C_Num);

for?(i?=?0;?i?<?Student_Count;?i++)?//不用全部窮舉,學號唯壹

{

if?(S[i].Num?==?C_Num)

{

printf("\n學號:%d\t姓名:%s\n",?S[i].Num,?S[i].Name);

printf("\n課程編號\t課程名稱\t課程成績\t課程學分\n");

printf("-----------------------------------------------------\n");

for?(j?=?0;?j?<?S[i].Lesson_Count;?j++)

{

printf("%d\t\t%s\t\t%d\t\t%d\n",?S[i].L[j].Lesson_Num,

S[i].L[j].Lesson_Name,?S[i].L[j].Lesson_Mark,

S[i].L[j].Lesson_Credit);

printf("-----------------------------------------------------\n");

}

printf("\n\n");

break;

}

}

}

printf("查找完畢...回車繼續\n");

getchar();

}

else?//選擇不合法

{

printf("選擇錯誤...回車繼續\n");

getchar();

return;

}

}

void?CheckClass()

{

int?C_LNum;

double?SSNum?=?0,?PassSNum?=?0,?SMark?=?0;

int?i,?j;

printf("\n請輸入課程編號:");

scanf("%d%*c",?&C_LNum);

printf("\n查找中......\n\n");

printf("學號\t姓名\t課程名稱\t課程成績\t課程學分\n");

printf("----------------------------------------------------\n");

for?(i?=?0;?i?<?Student_Count;?i++)

{

for?(j?=?0;?j?<?S[i].Lesson_Count;?j++)

{

if?(S[i].L[j].Lesson_Num?==?C_LNum)

{

printf("%d\t%s\t%s\t\t%d\t\t%d\n",?S[i].Num,?S[i].Name,?S[i].L[j].Lesson_Name,

S[i].L[j].Lesson_Mark,?S[i].L[j].Lesson_Credit);

printf("----------------------------------------------------\n");

SMark?+=?S[i].L[j].Lesson_Mark;

SSNum?++;

if?(S[i].L[j].Lesson_Mark?>=?60)?PassSNum++;

break;

}

}

}

printf("\n平均分:%.2lf\t及格率:%.2lf%%\n\n",?SMark?/?SSNum,?PassSNum?/?SSNum?*?100);

printf("\n查找完畢...回車繼續\n");

getchar();

}

void?WriteFile()

{

FILE?*fp;

int?i,?j;

char?Adr[100];

printf("\n請輸入寫入的文件地址:\n\n地址輸入格式:例如d:\\\\Student.txt(\\\\為轉義字符):");

scanf("%s%*c",?Adr);

printf("\n寫入中......\n");

if?(fp?=?fopen(Adr,"w"))?//寫入文件

{

fprintf(fp,"%d\n",Student_Count);

for?(i?=?0;?i?<?Student_Count;?i++)

{

fprintf(fp,"%d\t%s\t%d\n",S[i].Num,?S[i].Name,S[i].Lesson_Count);

for?(j?=?0;?j?<?S[i].Lesson_Count;?j++)

{

fprintf(fp,"%d\t%s\t%d\t%d\n",?S[i].L[j].Lesson_Num,

S[i].L[j].Lesson_Name,S[i].L[j].Lesson_Mark,

S[i].L[j].Lesson_Credit);

}

}

printf("\n寫入完成...回車繼續\n");

fclose(fp);

}

else

{

printf("\n寫入失敗...回車繼續\n");

}

getchar();

}

void?ReadFile()

{

FILE?*fp;

int?i,?j;

char?Adr[100];

printf("\n請輸入讀取(為防止讀入錯誤,希望與寫入文件內容格式壹致)的文件地址:\n\n地址輸入格式:例如d:\\\\Student.txt(\\\\為轉義字符):");

scanf("%s%*c",?Adr);

printf("\n讀取中......\n");

if?(fp?=?fopen(Adr,"r"))

{

fscanf(fp,"%d",&Student_Count);

for?(i?=?0;?i?<?Student_Count;?i++)

{

fscanf(fp,"%d%s%d",&S[i].Num,?&S[i].Name,&S[i].Lesson_Count);

for?(j?=?0;?j?<?S[i].Lesson_Count;?j++)

{

fscanf(fp,"%d%s%d%d",&S[i].L[j].Lesson_Num,

&S[i].L[j].Lesson_Name,&S[i].L[j].Lesson_Mark,

&S[i].L[j].Lesson_Credit);

}

}

printf("\n讀取成功...回車繼續\n");

fclose(fp);

}

else

{

printf("\n讀取失敗...回車繼續\n");

}

getchar();

}

  • 上一篇:酒精含量檢測儀(壹種無線酒精濃度探測儀的研制)
  • 下一篇:飼料機械的分類
  • copyright 2024編程學習大全網