# include & ltstdio.h & gt
# include & ltstdlib.h & gt
# include & ltstring.h & gt
#定義最大1000
Typedef無結構//定義課程結構。
{
int Lesson _ Num
char Lesson _ Name[50];
int Lesson _ Mark
int Lesson _ Credit
}課;
Typedef struct Student //定義學生的結構。
{
char Name[50];
int Num
int Lesson _ Count
第L課[20];
}學生;
學生S[MAX];
靜態int Student _ Count = 0;//記錄學生人數的變量
void print interface();//打印界面
int AddStudent();//Add,有返回值,表示操作成功。
int del student();//刪除,有返回值,表示操作成功。
void check student();//查看學生成績
void check class();//查看班級報告表
void WriteFile();//寫入文本文件
void ReadFile();//讀取文本文件
void main()
{
int選擇;
while (1)
{
print interface();
scanf("%d%*c ",& amp選擇);//"%*c "吸收回車,因為後面會輸入字母類型。
if(選擇& gt= 0 & amp& amp選擇& lt= 6) //選擇操作合法。
{
開關(選擇)
{
案例0:出口(1);
案例1:
{
系統(“cls”);
if(add student())printf(" \ n添加成功...按enter繼續\ n ");
elseprintf(" \ n添加失敗...回車繼續\ n ");
getchar();
getchar();
系統(“cls”);
打破;
}
案例二:
{
系統(“cls”);
if(del student())printf(" \ n刪除成功...按enter繼續\ n ");
elseprintf(" \ n刪除失敗...回車繼續\ n ");
getchar();
getchar();
系統(“cls”);
打破;
}
案例三:
{
系統(“cls”);
check student();
系統(“cls”);
打破;
}
案例4:
{
系統(“cls”);
check class();
系統(“cls”);
打破;
}
案例五:WriteFile();系統(“cls”);打破;
案例6:ReadFile();系統(“cls”);打破;
默認值:;
}
}
其他
{
Printf("沒有這個功能...重新選...回車確認\ n ");//選擇操作非法
getchar();
系統(“cls”);//清屏功能
}
}
}
void打印接口()
{
printf(" \ t-\ n ");
Printf("\t| 1,add | \ n ");
printf(" \ t | | \ n ");
Printf("\t| 2,delete | \ n ");
printf(" \ t | | \ n ");
Printf("\t| 3,檢查學生成績| \ n ");
printf(" \ t | | \ n ");
Printf("\t| 4,check class report form | \ n ");
printf(" \ t | | \ n ");
Printf("\t| 5,寫入文本文件| \ n ");
printf(" \ t | | \ n ");
Printf("\t| 6,讀取文本文件| \ n ");
printf(" \ t | | \ n ");
Printf("\t| 0,exit | \ n ");
printf(" \ t-\ n ");
printf(" \ t選擇操作:");
}
int AddStudent()
{
int S_count,I,j;
Printf("\n添加..................\ n ");
printf(" \ n添加學生人數(如1,2...999):");
scanf("%d ",& amps _ count);
if(學生人數+學生人數& gt= MAX)返回0;//超出數組的上限。
for (i =學生_計數;我& lt學生_計數+S _計數;i++)
{
Printf ("\ n \ tStudent %d: \n ",I-Student _ Count+1);
printf(" \ n \ t學生ID:");scanf("%d%*c ",& ampS[i]。num);
printf(" \ n \ t學生姓名:");獲取(S[i]。姓名);
printf(" \ n \ t該學生選修的課程數:");scanf("%d ",& ampS[i]。lesson _ Count);
for(j = 0;j & ltS[i]。Lesson _ Countj++)
{
Printf ("\ n \ tCourse %d: \n ",j+1);
printf(" \ n \ t \ t課程編號:");scanf("%d%*c ",& ampS[i]。L[j]。lesson _ Num);
printf(" \ n \ t \ t課程名稱:");獲取(S[i]。L[j]。lesson _ Name);
printf(" \ n \ t \ t課程分數:");scanf("%d ",& ampS[i]。L[j]。lesson _ Mark);
printf(" \ n \ t \ t課程學分:");scanf("%d ",& ampS[i]。L[j]。lesson _ Credit);
如果(S[i]。L[j]。Lesson _ Mark & lt60) S[i]。L[j]。lesson _ Credit = 0;//不及格的課程學分為0。
}
}
學生_計數+= S _計數;
返回1;
}
int DelStudent()
{
char * D _ Name
int D _ Num
int i,j;
printf(" \ n填寫要刪除的學生信息:\ n ");
printf(" \ n學生姓名:");獲取(D _ Name);
printf(" \ n學生ID:");scanf("%d ",& ampd _ Num);
for(I = 0;我& lt學生_計數;i++)
{
如果(!strcmp(S[i].Name,D_Name)和amp& ampS[i]。數量= = D _數量)
{
printf(" \ n找到該學生,刪除......................................................................................................................................................));
for(j = I+1;j & lt學生_計數;j++)
{
S[j-1]= S[j];
}
打破;
}
}
if (i ==學生人數)
{
printf(" \ n找不到學生...請核對信息\ n \ n ");
返回0;
}
其他
{
student _ Count-;
返回1;
}
}
void CheckStudent()
{
int C _ Choice
char C _ Name[50];
int C _ Num
int i,j;
printf(" \ n輸入學生信息(1。名稱\\ 2。學生證)並選擇:“);
scanf("%d%*c ",& ampc _ Choice);
printf(" \ n查找................\ n ");
if(c _ choice = = 1 | | c _ choice = = 2)//選擇合法。
{
if (C_Choice == 1)
{
printf(" \ n name:");獲取(C _ Name);
for(I = 0;我& lt學生_計數;I++) //全部窮舉,防止重名。
{
如果(!strcmp(S[i].姓名,C_Name))
{
printf(" \ n學生ID:% d \ t姓名:%s\n ",S[i]。數字,S[i]。姓名);
printf(" \ n課程編號\ t課程名稱\ t課程分數\ t課程學分\ n ");
printf("-\ n ");
for(j = 0;j & ltS[i]。Lesson _ Countj++)
{
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]。第壹課馬克,
S[i]。L[j]。lesson _ Credit);
printf("-\ n ");
}
printf(" \ n \ n ");
}
}
}
其他
{
printf(" \ n學生ID:");scanf("%d%*c ",& ampc _ Num);
for(I = 0;我& lt學生_計數;I++) //不要窮舉,妳的學號是唯壹的。
{
如果(S[i]。數量= = C _數量)
{
printf(" \ n學生ID:% d \ t姓名:%s\n ",S[i]。數字,S[i]。姓名);
printf(" \ n課程編號\ t課程名稱\ t課程分數\ t課程學分\ n ");
printf("-\ n ");
for(j = 0;j & ltS[i]。Lesson _ Countj++)
{
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]。第壹課馬克,
S[i]。L[j]。lesson _ Credit);
printf("-\ n ");
}
printf(" \ n \ n ");
打破;
}
}
}
Printf("搜索完成...回車繼續\ n ");
getchar();
}
否則//選擇是非法的
{
Printf("錯誤選擇...回車繼續\ n ");
getchar();
返回;
}
}
void CheckClass()
{
int C _ LNum
double SSNum = 0,PassSNum = 0,SMark = 0;
int i,j;
printf(" \ n請輸入課程編號:");
scanf("%d%*c ",& ampc _ LNum);
printf(" \ n查找...................................................................................................................................................................
Printf("學號\ tname \ tname當然\ tname當然\ tname當然\ tname當然\ tname當然\ n ");
printf("-\ n ");
for(I = 0;我& lt學生_計數;i++)
{
for(j = 0;j & ltS[i]。Lesson _ Countj++)
{
如果(S[i]。L[j]。Lesson_Num == C_LNum)
{
printf(" % d \ t % S \ t % S \ t \ t % d \ t \ t % d \ n ",S[i]。數字,S[i]。姓名,S[i]。L[j]。課程名稱,
S[i]。L[j]。馬克,S[i]。L[j]。lesson _ Credit);
printf("-\ n ");
SMark += S[i]。L[j]。Lesson _ Mark
ss num++;
如果(S[i]。L[j]。Lesson _ Mark & gt= 60)passs num++;
打破;
}
}
}
Printf("\n平均分:%.2lf\t通過率:% .2lf%% \ n \ n ",smark/ssnum,passs num/ss num * 100);
printf(" \ n搜索完成...回車繼續\ n ");
getchar();
}
void WriteFile()
{
FILE * fp
int i,j;
char Adr[100];
printf(" \ 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;我& lt學生_計數;i++)
{
fprintf(fp," %d\t%s\t%d\n ",S[i]。數字,S[i]。姓名,S[i]。lesson _ Count);
for(j = 0;j & ltS[i]。Lesson _ Countj++)
{
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]。第壹課馬克,
S[i]。L[j]。lesson _ Credit);
}
}
printf(" \ n寫入完成...回車繼續\ n ");
fclose(FP);
}
其他
{
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 ",& amp學生_計數);
for(I = 0;我& lt學生_計數;i++)
{
fscanf(fp," %d%s%d ",& ampS[i]。數字& ampS[i]。姓名& ampS[i]。lesson _ Count);
for(j = 0;j & ltS[i]。Lesson _ Countj++)
{
fscanf(fp," %d%s%d%d ",& ampS[i]。L[j]。Lesson_Num
& ampS[i]。L[j]。課程名稱& ampS[i]。L[j]。第壹課馬克,
& ampS[i]。L[j]。lesson _ Credit);
}
}
printf(" \ n讀取成功...回車繼續\ n ");
fclose(FP);
}
其他
{
printf(" \ n讀取失敗...回車繼續\ n ");
}
getchar();
}