本文實例為大家分享了C語言學生選修課程系統的具體代碼,供大家參考,具體內容如下
我編程的時間不長,所以這里面肯定有一些錯誤,或者存在更好的解決方案,歡迎大神上課!謝謝!
ps:尋找一起學習的小伙伴!
代碼:
/**********************************主題:學生選修課程系統設計 * *設計要求: *1.添加功能:程序能夠任意添加課程和學生記錄,可提供選擇界面供用戶選擇所需要添加的類別,要求編號要唯一,如果添加了重復編號的記錄是,則提示數據添加重復并取消添加。 *2.查詢功能:可根據編號、姓名等信息對已添加的同學和課程記錄進行查詢,如果未找到,給出相應的提示信息,如果找到,則顯示相應的記錄信息。 *3.顯示功能:可顯示當前系統中所有學生和課程的記錄,每條記錄占據一行。 *4.編輯功能:可根據查詢結果對相應的記錄進行修改,修改時注意編號的唯一性。 *5.刪除功能:主要實現對已添加的學生和課程記錄進行刪除。如果當前系統中沒有對應的記錄,則提示“記錄為空!”并返回操作。 *6.統計功能:能根據多種參數進行統計。能統計學生人數、課程門數、選修某門課程的學生的相關信息。 **********************************//* * Verson:2.0(basic) * * History: 完成課程信息的錄入,查詢等操作;完成選課功能(2017-05-05 20:30:00-01:20:00) ** Author:universes ***********************************//* * Verson:1.9* * History:完成了學生信息的查詢操作 (2017-05-04 22:00:32-01:11:00) ** Author:universes **********************************//* * Verson:1.5* * HIstory2:添加查重功能 (2017-05-02 23:39:19-01:06:05) * History1:完成了用戶對課程和學生信息的添加操作(沒有查重功能)(2017-05-02 22:06:13-23:39:19) ** Author:universes**********************************//* * Verson:1.0 ** History:完成了用戶的選擇功能框架(2017-04-19 22:06:13-22:40:47) ** Author:universes **********************************/#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <string.h>#define SIZE_STU 10#define SIZE_COU 10#define SIZE_SEL 10//////////////函數聲明部分 void home(void);void stu_operate(void);void cou_operate(void);void statistic(void);void choose(void);void delete_sel(int);//--學生信息部分: void input_stu(void);void search_stu(void);void search_stu_id(void);void search_stu_name(void);void show_stu(void);void edit_stu(void);void renew_stu(void); void delete_stu(void);//--課程信息部分: void input_cou(void);void search_cou(void);void search_cou_id(void);void search_cou_name(void);void show_cou(void);void edit_cou(void);void renew_cou(void); void delete_cou(void);/*學生信息結構體*/struct student_info { char stu_ID[9]; char stu_name[5]; char sex[9]; char age[9]; char collage[9]; char grade[9]; char contact[9];}stu[SIZE_STU];/*課程信息結構體*/struct course_info { char course_ID[9]; char course_name[9]; char property[9]; char period[9]; char credit[9]; char time[9]; int people;}cou[SIZE_COU];/*選課記錄結構體*/struct select { int s;//存放學生信息的數組下標 int c;//存放課程信息的數組下標 }sel[SIZE_SEL]; //全局變量i,j,x分別是學生,課程,選課信息數組下標int i = -1;int j = -1;int x = -1;int main(void){ //進入歡迎界面 home(); return 0;}//歡迎界面 void home(void) { printf("/n-------------------------歡迎進入選課系統!----------------------"); int h; printf("/n/n 請選擇你要進行的操作:"); printf("/n/n 1.學生操作"); printf("/n 2.課程操作"); printf("/n 3.開始選課"); printf("/n 4.選課統計"); printf("/n 5.退出系統"); printf("/n "); printf("/n 請輸入:"); scanf("%d",&h); system("cls"); switch(h){ case 1: stu_operate(); break; case 2: cou_operate(); break; case 3: choose(); break; case 4: statistic(); break; default: system("cls"); printf("BYE!"); break; }}/*開始選課*/void choose(void){ char stu_id[10],cou_id[10]; printf("/n-------------------------歡迎進入選課系統!----------------------"); //輸入選課學生信息 printf("/n/n 請輸入選課人學號:"); fflush(stdin); scanf("%s",stu_id); int h,flag = 0; for(h = 0;h <= i;h++){ if(strcmp(stu[h].stu_ID,stu_id)==0){ flag = 0; break; } else { flag = 1; } } if(flag||i==-1){ printf("/n 不存在此學號/n"); system("pause"); system("cls"); home(); } //錄入姓名信息 x++; sel[x].s = h; //輸入課程信息 printf("/n/n 請輸入選修課程號:"); fflush(stdin); scanf("%s",cou_id); flag = 0; for(h = 0;h <= j;h++){ if(strcmp(cou[h].course_ID,cou_id)==0){ flag = 0; break; } else { flag = 1; } } if(flag||j==-1){ printf("/n 不存在此課程號/n"); x--; system("pause"); system("cls"); home(); } //錄入課程信息 sel[x].c = h; cou[h].people++; printf("/n 錄入成功!/n"); system("pause"); system("cls"); home();}/*刪除選課記錄*/void delete_sel(int q){//刪除第q+1條記錄 /*注意!本函數沒有將x減1,請在函數外手動減1(考慮外層函數循環的需要)*/ int h; cou[sel[q].c].people--; for(h = q;q < x;h++){ q++; sel[h].c = sel[q].c; sel[h].s = sel[q].s; } }//對學生記錄進行操作void stu_operate(void) { printf("/n-------------------------歡迎進入選課系統!----------------------"); printf("/n/n 請選擇你要對學生記錄進行的操作:"); printf("/n/n 1.添加"); printf("/n 2.查詢"); printf("/n 3.顯示"); printf("/n 4.返回主頁面"); printf("/n "); printf("/n 請輸入:"); int i; scanf("%d",&i); system("cls"); switch(i){ case 1://添加學生信息 input_stu(); break; case 2://查詢學生信息 search_stu(); break; case 3://顯示所有學生信息 show_stu(); break; case 4: home(); break; }}//對課程記錄進行操作 void cou_operate(void) { printf("/n-------------------------歡迎進入選課系統!----------------------"); printf("/n/n 請選擇你要對課程記錄進行的操作:"); printf("/n/n 1.添加"); printf("/n 2.查詢"); printf("/n 3.顯示"); printf("/n 4.返回主頁面"); printf("/n "); printf("/n 請輸入:"); int i; scanf("%d",&i); system("cls"); switch(i){ case 1: input_cou(); break; case 2: search_cou(); break; case 3: show_cou(); case 4: home(); break; }}//選課信息統計記錄void statistic(void){ printf("/n-------------------------歡迎進入選課系統!----------------------"); printf("/n/n 共有學生信息:%d 條",i+1); printf("/n 共有課程信息:%d 條",j+1); if(x == -1){ printf("/n 選課記錄:0 條"); printf("/n/n "); system("pause"); system("cls"); home(); } else { printf("/n/n 選課記錄 %d 條:",x+1); int m; for(m = 0;m <= x;m++){ printf("/n ================"); printf("/n 第%d條",m+1); printf("/n 學生學號:%s",stu[sel[m].s].stu_ID); printf("/n 學生姓名:%s",stu[sel[m].s].stu_name); printf("/n 課程號:%s",cou[sel[m].c].course_ID); printf("/n 課程名:%s",cou[sel[m].c].course_name); } printf("/n/n "); system("pause"); system("cls"); home(); } }//--------------------------------------學生信息插入--------------------------------------void input_stu(void){ char flag; FILE * fp; //--判斷文件是否為空 fp = fopen("student.txt","r+"); flag = fgetc(fp); if(flag==EOF){ fprintf(fp,"學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式/n"); } fclose(fp); //-- fp = fopen("student.txt","a+"); if(fp == NULL){ printf("打開文件失??!"); system("cls"); stu_operate(); } printf("學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式/n"); while(1){ i++; scanf("%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact); //--數據查重 int h; for(h = 0;h < i;h++){ if(i == 0) break;//第一條數據不需要查重 if (strcmp(stu[h].stu_ID,stu[i].stu_ID)==0) { printf("該學號已存在,請重新輸入!/n"); scanf("/n%s %s %s %s %s %s %s",&stu[i].stu_ID,&stu[i].stu_name,&stu[i].sex,&stu[i].age,&stu[i].collage,&stu[i].grade,&stu[i].contact); h = -1; } } //-- fprintf(fp,"%s/t%s/t%s/t%s/t%s/t%s/t%s/n",stu[i].stu_ID,stu[i].stu_name,stu[i].sex,stu[i].age,stu[i].collage,stu[i].grade,stu[i].contact); printf("/n錄入成功,繼續錄入輸入y,返回上一級請按任意鍵:"); fflush(stdin); scanf("%c",&flag); fclose(fp); if(flag!='y'&&'Y') break; fp = fopen("student.txt","a"); } renew_stu(); system("cls"); stu_operate();} /*查詢學生信息*/void search_stu(void){ system("cls"); printf("/n請選擇查詢方式:"); printf("/n 1.學號查詢"); printf("/n 2.姓名查詢"); printf("/n請選擇:"); int h; scanf(" %d",&h); switch(h){ case 1: search_stu_id(); break; case 2: search_stu_name(); break; } }/*學號查詢*/void search_stu_id(void){ system("cls"); char id[9]; printf("/n輸入學生的學號:"); fflush(stdin); scanf("%s",id); int h; for(h = 0;h <= i;h++){ if(strcmp(stu[h].stu_ID,id)==0){ system("cls"); printf("查找成功!"); printf("/n/n/t學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式"); printf("/n/t-----------------------------------------------------------------"); printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t%s/n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); system("pause"); system("cls"); stu_operate(); } } system("cls"); printf("沒有此學號!/n"); system("pause"); system("cls"); stu_operate();} /*姓名查詢*/void search_stu_name(void){ system("cls"); char name[9]; printf("/n輸入學生的姓名:"); fflush(stdin); scanf("%s",name); int h; for(h = 0;h <= i;h++){ if(strcmp(stu[h].stu_name,name)==0){ system("cls"); printf("查找成功!"); printf("/n/n/t學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式"); printf("/n/t---------------------------------------------------------"); printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t%s/n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); system("pause"); system("cls"); stu_operate(); } } system("cls"); printf("沒有此姓名!"); system("pause"); system("cls"); stu_operate();} /*顯示所有學生信息*/void show_stu(void){ int h; if(i == -1){ printf("/n還沒有錄入信息!/n"); system("pause"); system("cls"); stu_operate(); } system("cls"); printf("/n/n/t學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式"); printf("/n/t---------------------------------------------------------"); for(h = 0;h <= i;h++){ printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t%s/n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); } // fflush(stdin); printf("/n/t1.修改"); printf("/n/t2.刪除"); printf("/n/t3.返回"); printf("/n/n 選擇要進行的操作:"); int flag; fflush(stdin); scanf("%d",&flag); switch(flag){ case 1: edit_stu(); break; case 2: delete_stu(); break; default: system("cls"); stu_operate(); break; } }/*編輯學生信息*/void edit_stu(void){ printf("/n輸入需要編輯的學生的學號:"); char id[10]; getchar(); scanf("%s",id); int h; for(h = 0;h <= i;h++){ if(strcmp(stu[h].stu_ID,id)==0){//找到需要編輯的行 system("cls"); printf("/n/n/t學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式"); printf("/n/t---------------------------------------------------------"); printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t%s/n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); printf("/n這是修改前的數據,請依次輸入修改值:/n/t"); fflush(stdin); scanf("%s %s %s %s %s %s %s",&stu[h].stu_ID,&stu[h].stu_name,&stu[h].sex,&stu[h].age,&stu[h].collage,&stu[h].grade,&stu[h].contact); int k; for(k = 0;k <= i;k++){ if(strcmp(stu[k].stu_ID,stu[h].stu_ID)==0){ if(k==h){ continue; } else {//學號不唯一 printf("/n此學號已存在!重新輸入學號:"); fflush(stdin); scanf("%s",&stu[h].stu_ID); k = -1; } } } /*將修改信息寫入文件*/ //思想:將原文件重新寫入一遍 renew_stu(); system("cls"); printf("修改成功!/n"); system("pause"); system("cls"); stu_operate(); } } printf("/n此學號不存在!/n"); system("pause"); system("cls"); stu_operate();}/*刪除學生信息*/void delete_stu(void){ printf("/n輸入需要編輯的學生的學號:"); char id[10]; getchar(); scanf("%s",id); int h; for(h = 0;h <= i;h++){ if(strcmp(stu[h].stu_ID,id)==0){//找到需要編輯的行 system("cls"); //檢查他/她是否選課了 int a; for(a = 0;a <= x;a++){ if(h==sel[a].s){//選課了則將對應課程記錄減1,以及選課數組減1 delete_sel(a); a = -1; x--; continue; } } //如果只有一條記錄 if(i==0){ i = -1; renew_stu(); printf("修改成功!/n"); system("pause"); system("cls"); stu_operate(); } int k; for(k = h+1;k <= i;k++,h++){//將數組直接向前移動 strcpy(stu[h].stu_ID,stu[k].stu_ID); strcpy(stu[h].stu_name,stu[k].stu_name); strcpy(stu[h].sex,stu[k].sex); strcpy(stu[h].grade,stu[k].grade); strcpy(stu[h].contact,stu[k].contact); strcpy(stu[h].collage,stu[k].collage); strcpy(stu[h].age,stu[k].age); } /*將修改信息寫入文件*/ //思想:將原文件重新寫入一遍 renew_stu(); i--; system("cls"); printf("修改成功!/n"); system("pause"); system("cls"); stu_operate(); } } printf("/n此學號不存在!/n"); system("pause"); system("cls"); stu_operate();}//--------------------------------------課程信息插入--------------------------------------void input_cou(void){ char flag; FILE * fp; //--判斷文件是否為空 fp = fopen("course.txt","r+"); flag = fgetc(fp); if(flag==EOF){ fprintf(fp,"代碼/t名稱/t性質/t總學時/t學分/t開課學期/t選修人數/n"); } fclose(fp); //-- fp = fopen("course.txt","a+"); if(fp == NULL){ printf("打開文件失??!"); system("cls"); cou_operate(); } printf("代碼/t名稱/t性質/t總學時/t學分/t開課學期/n"); while(1){ j++; scanf("%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time); //--數據查重 int h; for(h = 0;h < j;h++){ if(j == 0) break;//第一條數據不需要查重 if (strcmp(cou[h].course_ID,cou[j].course_ID)==0) { printf("該課程號已存在,請重新輸入!/n"); scanf("/n%s %s %s %s %s %s",&cou[j].course_ID,&cou[j].course_name,&cou[j].property,&cou[j].period,&cou[j].credit,&cou[j].time); h = -1; } } //-- fprintf(fp,"%s/t%s/t%s/t%s/t%s/t%s/t/t%d/n",cou[j].course_ID,cou[j].course_name,cou[j].property,cou[j].period,cou[j].credit,cou[j].time,cou[j].people); printf("/n錄入成功,繼續錄入輸入y,返回上一級請按任意鍵:"); fflush(stdin); scanf("%c",&flag); fclose(fp); if(flag!='y'&&'Y') break; fp = fopen("course.txt","a"); } renew_cou(); system("cls"); cou_operate();} /*查詢課程信息*/void search_cou(void){ system("cls"); printf("/n請選擇查詢方式:"); printf("/n 1.課程號查詢"); printf("/n 2.課程名查詢"); printf("/n請選擇:"); int h; scanf(" %d",&h); switch(h){ case 1: search_cou_id(); break; case 2: search_cou_name(); break; } }/*課程號查詢*/void search_cou_id(void){ system("cls"); char id[9]; printf("/n輸入課程號:"); fflush(stdin); scanf("%s",id); int h; for(h = 0;h <= j;h++){ if(strcmp(cou[h].course_ID,id)==0){ system("cls"); printf("查找成功!"); printf("/n/n/t代碼/t名稱/t性質/t總學時/t學分/t開課學期/t選修人數"); printf("/n/t-----------------------------------------------------------------"); printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t/t%d/n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); system("pause"); system("cls"); cou_operate(); } } system("cls"); printf("沒有此課程號!/n"); system("pause"); system("cls"); cou_operate();} /*課程名查詢*/void search_cou_name(void){ system("cls"); char name[9]; printf("/n輸入課程名:"); fflush(stdin); scanf("%s",name); int h; for(h = 0;h <= j;h++){ if(strcmp(cou[h].course_name,name)==0){ system("cls"); printf("查找成功!"); printf("/n/n/t代碼/t名稱/t性質/t總學時/t學分/t開課學期/t選修人數"); printf("/n/t---------------------------------------------------------"); printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t/t%d/n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); system("pause"); system("cls"); cou_operate(); } } system("cls"); printf("沒有此課程名!"); system("pause"); system("cls"); cou_operate();} /*顯示所有課程信息*/void show_cou(void){ int h; if(j == -1){ printf("/n還沒有錄入信息!/n"); system("pause"); system("cls"); cou_operate(); } system("cls"); printf("/n/n/t代碼/t名稱/t性質/t總學時/t學分/t開課學期/t選修人數"); printf("/n/t-------------------------------------------------------------"); for(h = 0;h <= j;h++){ printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/t/t%d/n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); } // fflush(stdin); printf("/n/t1.修改"); printf("/n/t2.刪除"); printf("/n/t3.返回"); printf("/n/n 選擇要進行的操作:"); int flag; fflush(stdin); scanf("%d",&flag); switch(flag){ case 1: edit_cou(); break; case 2: delete_cou(); break; default: system("cls"); cou_operate(); break; } }/*編輯課程信息*/void edit_cou(void){ printf("/n輸入需要編輯的課程號:"); char id[10]; getchar(); scanf("%s",id); int h; for(h = 0;h <= j;h++){ if(strcmp(cou[h].course_ID,id)==0){//找到需要編輯的行 system("cls"); printf("/n/n/t代碼/t名稱/t性質/t總學時/t學分/t開課學期"); printf("/n/t-------------------------------------------------------------"); printf("/n/t%s/t%s/t%s/t%s/t%s/t%s/n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time); printf("/n這是修改前的數據,請依次輸入修改值:/n/t"); fflush(stdin); scanf("%s %s %s %s %s %s",&cou[h].course_ID,&cou[h].course_name,&cou[h].property,&cou[h].period,&cou[h].credit,&cou[h].time); int k; for(k = 0;k <= j;k++){ if(strcmp(cou[k].course_ID,cou[h].course_ID)==0){ if(k==h){ continue; } else {//課程號不唯一 printf("/n此課程號已存在,重新輸入:"); fflush(stdin); scanf("%s",&cou[h].course_ID); k = -1; } } } /*將修改信息寫入文件*/ //思想:將原文件重新寫入一遍 renew_cou(); system("cls"); printf("修改成功!/n"); system("pause"); system("cls"); cou_operate(); } } printf("/n此課程號不存在!/n"); system("pause"); system("cls"); cou_operate();}/*刪除課程信息*/void delete_cou(void){ printf("/n輸入需要編輯的課程號:"); char id[10]; getchar(); scanf("%s",id); int h; for(h = 0;h <= j;h++){ if(strcmp(cou[h].course_ID,id)==0){//找到需要編輯的行 system("cls"); //如果只有一條記錄 if(j==0){ j = -1; renew_cou(); printf("修改成功!/n"); system("pause"); system("cls"); cou_operate(); } //查看是否有人選課 if(cou[h].people!=0){//有人選課時 int a; for(a = 0;a <= x;a++){ if(sel[a].c == h){ delete_sel(a); a = -1; x--; continue; } } } int k; for(k = h+1;k <= j;k++,h++){//將數組直接向前移動 strcpy(cou[h].course_ID,cou[k].course_ID); strcpy(cou[h].course_name,cou[k].course_name); strcpy(cou[h].property,cou[k].property); strcpy(cou[h].period,cou[k].period); strcpy(cou[h].credit,cou[k].credit); strcpy(cou[h].time,cou[k].time); } /*將修改信息寫入文件*/ //思想:將原文件重新寫入一遍 renew_cou(); j--; system("cls"); printf("修改成功!/n"); system("pause"); system("cls"); cou_operate(); } } printf("/n此課程號不存在!/n"); system("pause"); system("cls"); cou_operate();}//--功能函數/*更新系統數據至文件*/void renew_stu(void){ FILE * fp; fp = fopen("student.txt","w+"); if(fp == NULL){ printf("/n打開文件失敗,無法保存至文件。/n"); fclose(fp); return ; } fprintf(fp,"學號/t姓名/t性別/t年齡/t系別/t班級/t聯系方式/n"); if(i == -1){ fclose(fp); return; } int h; for(h = 0;h <= i;h++){ fprintf(fp,"%s/t%s/t%s/t%s/t%s/t%s/t%s/n",stu[h].stu_ID,stu[h].stu_name,stu[h].sex,stu[h].age,stu[h].collage,stu[h].grade,stu[h].contact); } fclose(fp); } void renew_cou(void){ FILE * fp; fp = fopen("course.txt","w+"); if(fp == NULL){ printf("/n打開文件失敗,無法保存至文件。/n"); fclose(fp); return ; } fprintf(fp,"代碼/t名稱/t性質/t總學時/t學分/t開課學期/t選修人數/n"); if(j == -1){ fclose(fp); return; } int h; for(h = 0;h <= j;h++){ fprintf(fp,"%s/t%s/t%s/t%s/t%s/t%s/t/t%s/n",cou[h].course_ID,cou[h].course_name,cou[h].property,cou[h].period,cou[h].credit,cou[h].time,cou[h].people); } fclose(fp); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。
新聞熱點
疑難解答
圖片精選