C語言課程設計 學生信息管理系統(tǒng)
《C語言課程設計 學生信息管理系統(tǒng)》由會員分享,可在線閱讀,更多相關《C語言課程設計 學生信息管理系統(tǒng)(13頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、 C語言課程設計 實驗題目 學生信息管理系統(tǒng) 一、引言 1.熟練掌握C語言編程的應用的相關操作。 2.綜合應用C語言的知識,實現(xiàn)一個完整的系統(tǒng),提高編程能力,體會軟件程序的開發(fā)過程。 3. 培養(yǎng)學生獨立完成C語言程序課程設計的能力 4.運用結構體和鏈表編輯一個簡單的學生基本信息管理系統(tǒng),使之能夠完成學生基本信息的創(chuàng)建、修改、添加、查詢、刪除、排序、輸出、退出操作。 5.執(zhí)行編譯操作,并根據(jù)提示調(diào)試此程序,排除所有的錯誤和警告。直到編譯成功為止。 6.執(zhí)行運行操作,逐一對每個模塊進行調(diào)試。直到全部程序運行成功為止。
2、 二、 需求分析 1.該學生信息管理系統(tǒng),完成學生基本信息的錄入、修改、添加、查詢、刪除、排序、輸出、退出操作。 每個模塊的功能如下: A、錄入模塊能夠完成學生姓名、性別、學號、年齡、出生年月、入學年月的輸入。 B、更新模塊中可以對學生信息進行添加、刪除、修改。 C、打印模塊可以輸出以保存的所有學生信息。 D、查詢模塊能按學號或姓名查詢一個學生的全部信息,并能顯示該學生的全部信息,可以查詢所有已經(jīng)錄入的學生信息。 E、排序模塊將按照學生學號的順序進行所有學生基本信息的排序并顯示。 F、退出模塊可直接退出此程序,結束操作。 2.創(chuàng)建
3、該學生信息管理系統(tǒng)目的就是能夠?qū)W生基本信息進行創(chuàng)建、修改、添加、查詢、刪除、排序等功能,這樣可以簡化許多人工做起來很復雜的問題,它還可以重復使用,方便、快捷。 三、概要設計 1. 設計方案 主 函 數(shù) 錄入模塊 查詢模塊 輸出(打?。┠K 添加模塊 排序模塊 修改模塊 刪除模塊 2、模塊功能說明 (1)錄入模塊:對定義的學生信息結構體變量,利用循環(huán),將鍵入的學生 保存至指定文件,其中,學號、姓名、性別定義
4、為字符型,年齡、出生年月,入學年月都定義為整型。 (2)添加模塊:選擇添加信息選項,按系統(tǒng)提示依次輸入基本信息,完畢后,將詢問是否繼續(xù)。 (3)修改模塊:選擇修改選項,輸入要修改學生的姓名,利用循環(huán)、判斷語句,找到對應的信息,可對任意一項進行修改,完畢后,詢問是夠繼續(xù)。 (4)刪除模塊:選擇刪除選項,可繼續(xù)選擇按學號或按姓名刪除。選擇后,將打印出其基本信息,詢問是否確認刪除。利用覆蓋刪除法,刪除所選的項目。 (5)輸出模塊:利用讀函數(shù),讀取鍵入的信息,出入編輯好的表格及所有學生信息。 (6)查詢模塊:此模塊有2種查詢方式:按姓名查詢、按學號查詢。它
5、也是通過循環(huán)判斷查找,如果找到則顯示該學生的全部信息,否則,將輸出沒有查到該學生信息,,給以提示。 (7)排序模塊:對學生的學號進行排序。利用選擇排序法排序,最后保存結果。 四、詳細設計及運行結果 流程圖 錄入模塊 輸入學生基本信息 輸入完畢 返回主菜單 否 是 主 函 數(shù) 錄入模塊函數(shù) 查詢模塊函數(shù) 輸出模塊函數(shù) 添加模塊函數(shù) 排序模塊函數(shù) 修改模塊函數(shù) 刪除模塊函數(shù) 按姓名查詢 按學號查詢 按學號刪除 按所選項修改
6、 添加模塊 輸入要添加人的學號 輸入添加學生的全部信息 返回主菜單 繼續(xù)? 是 否 刪除模塊 按姓名刪除 按學號刪除 返回上一級菜單 顯 示刪除人 的信 息 返回菜單 確認刪除 修改模塊 輸入修改學生學號 顯示學生基本信息 查詢 信息存在 不存在 學號 姓名 性別 年齡 入學年月 選擇修改項 顯示修改后信息 返回主菜單 是否繼續(xù) 是 否
7、 排序模塊 排序方式 按學號排序 顯示排序結果 返回主界面 查 詢 模 塊 按 姓 名 查 詢 按 學 號 查 詢 輸出所查詢的學生信息 返回主界面 六.調(diào)試情況,設計技巧及體會 1.調(diào)試: 輸入學生信息的情況,按照編寫的程序進行進行調(diào)試,輸出學生信息情況、添加、刪除、查詢(1按學號or2按姓名)、排序、修改等學生信息的管理的情況,退出程序。 2.設計技巧: 通過運用C語言的語法規(guī)則,結構體和鏈表編寫簡單的 學生信息管理系統(tǒng)。運用模塊,編寫各
8、個小程序是指連接成一個完整的學生信息管理系統(tǒng),使程序更加嚴謹,簡潔,清晰,實用。 3.體會: 我對自己這次的實驗設計完成的還比較滿意,這個學生管數(shù)組知識運用C++編寫完成。此程序的不足之處是學生基本信息方面還不夠完善,譬如沒有家庭住址,電話號碼等相關的學生基本信息。課程設計看似簡單,實則不然。 它花費了近一周的時間寫程序,以后的大多數(shù)時間就在調(diào)程序,從構思到結構大體框架再到細節(jié)。這讓我明白“宏觀主宰全局,細節(jié)決定成敗”的道理,即使是小到一個分號也有可能使你的程序無法運行。寫程序的時候必須很認真,欲速則不達。在實習中,我深刻體會到老師發(fā)揮的重要作用:C語言程序?qū)ξ覀儊碚f比較難,在
9、匆忙的學習中更是難上加難,但在老師的幫助下我學會了如何調(diào)試,如何查找系統(tǒng)沒有提示的錯誤,最后終于排除萬難把程序搞定,體會到原來編程也挺有意思的。 七、源程序(略,詳見電子版實驗報告) #include"stdio.h" #include"stdlib.h" #include"string.h" #define MAX 100 #define N 3 struct day_type /*日期結構體類型*/ { int year; int month; }; struct student_type { char num[8]; /*學號*/ ch
10、ar name[20]; /*姓名*/ char sex[1]; /*性別*/ int age; /*年齡*/ struct day_type birthday; /*出生年月*/ struct day_type comingday; /*入學年月*/ }; int number; int read_file(struct student_type students[]) { FILE *fp; int i=0; if((fp=fopen("student.txt","
11、rt"))==NULL) {printf("\n 庫存文件不存在,請創(chuàng)建!\n"); return 0; } while(!feof(fp)) { fread(&students[i],sizeof(struct student_type),1,fp); if(students[i].num==0) break; else i++; } fclose(fp); return i; } void save_file(struct student_type students[],int sum) { FILE *fp
12、;
int i;
if((fp=fopen("student.txt","wt"))==NULL)
{ printf("讀文件錯誤\n");
return; }
for(i=0;i 13、m("cls");
printf("\n請輸入要錄入的學生的個數(shù)(最多%d個):\n",MAX);
scanf("%d",&number);
printf("\n\n 錄入學生信息 (最多錄入%d個)\n",number);
printf(" ---------------------------------------\n");
while(i 14、m);
if( students[i].num==0) break;
printf("\n 學生姓名:");
scanf("%s",students[i].name);
printf("\n 學生性別(男為m,女為w):");
scanf("%s",students[i].sex);
printf("\n 學生年齡:");
scanf("%d",&students[i].age);
printf("\n 學生出生年月(yyyy-mm):");
scanf("%d-%d", 15、&students[i].birthday.year,&students[i].birthday.month);
printf("\n 學生入學年月(yyyy-mm):");
scanf("%d-%d",&students[i].comingday.year,&students[i].comingday.month);
i++; }
printf("\n %d個學生信息錄入完畢!\n",i);
getchar();
printf("\n 按回車鍵返回主菜單!");
getchar();
return i;
}
/*輸出模 16、塊*/
void output(struct student_type students[],int sum)
{ FILE *fp;
int i=0;
system("cls");
fp=fopen("student.txt","rt");
printf("\n ----學生信息表---- \n\n");
printf("學生學號--學生姓名--學生性別--學生年齡--出生年月(yyyy-mm)--入學年月(yyyy-mm)\n");
printf("---------------------------- 17、------------------------------------------------\n");
do
{ fread(&students[i],sizeof(struct student_type),1,fp);
if(students[i].num!=0)
{ printf("%6s %8s %3s %4d %10d-%2d %10d-%2d\n",students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,studen 18、ts[i].birthday.month,students[i].comingday.year,students[i].comingday.month);
printf("----------------------------------------------------------------------------\n");
i++; }
}while(i 19、ype students[],int sum) /*修改模塊*/
{ int i=0,choice,flag;
char modify_num[8];
do
{ system("cls");
printf("\n 輸入要修改的學生的學號:");
scanf("%s",modify_num);
for(i=0;i 20、;
printf("學生學號--學生姓名--學生性別--學生年齡--出生年月(yyyy-mm)--入學年月(yyyy-mm)\n");
printf("----------------------------------------------------------------------------\n");
printf("%6s %8s %3s %4d %10d-%2d %10d-%2d\n",students[i].num,students[i].name,students[i].sex,st 21、udents[i].age,students[i].birthday.year,students[i].birthday.month,students[i].comingday.year,students[i].comingday.month);
printf("1.學生學號 2.學生姓名 3.學生性別 4.學生年齡 5.出生年月(yyyy-mm) 6.入學年月(yyyy-mm)\n");
printf("請輸入要修改項的編號(選擇1-6):");
scanf("%d",&choice);
switch(choice)
{ 22、case 1: printf("\n 輸入修改后的學生學號:");
scanf("%s",students[i].num); break;
case 2: printf("\n 輸入修改后的學生姓名:");
scanf("%s",students[i].name); break;
case 3: printf("\n 輸入修改后的學生性別:");
scanf("%s",students[i].sex); break;
case 4: printf("\n 輸入修改后的學生年齡 23、:");
scanf("%d",&students[i].age); break;
case 5: printf("\n 輸入修改后的學生出生年月(yyyy-mm):");
scanf("%d-%d",&students[i].birthday.year,&students[i].birthday.month); break;
case 6: printf("\n 輸入修改后的學生入學年月(yyyy-mm):");
scanf("%d-%d",&students[i].comingday.year,& 24、students[i].comingday.month); break; }
printf("\n ----學生信息----(修改后) \n ");
printf("學生學號--學生姓名--學生性別--學生年齡--出生年月(yyyy-mm)--入學年月(yyyy-mm)\n");
printf("----------------------------------------------------------------------------\n");
printf("%6s %8s %3s 25、 %4d %10d-%2d %10d-%2d\n",students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,students[i].birthday.month,students[i].comingday.year,students[i].comingday.month);
getchar();
break; }
if(i==sum) {printf("\n 該學生不存在"); getchar();}
26、 save_file(students,sum);
printf("\n\n 繼續(xù)修改嗎?( Y/N(選擇N則返回主菜單) )");
choice=getchar();
if(choice==Y||choice==y)
{ flag=1;
printf("\n 繼續(xù)修改!\n"); }
else flag=0;
}while(flag==1);
printf("\n");
}
void reserch(struct student_type students[],int sum) /*查詢模塊*/
{ int i=0,ch 27、oice,flag;
char reserch[8];
do
{ system("cls");
printf("\n 請選擇查詢方式(1或2): 1.按學號 2.按姓名\n");
scanf("%d",&choice);
switch(choice)
{ case 1: printf("\n 請輸入要查詢的學生的學號:");
scanf("%s",reserch);
for(i=0;i 28、dents[i].num,reserch))
{ printf("\n ----學生信息---- \n ");
printf("學生學號--學生姓名--學生性別--學生年齡--出生年月(yyyy-mm)--入學年月(yyyy-mm)\n");
printf("----------------------------------------------------------------------------\n")
; 29、 printf("%6s %8s %3s %4d %10d-%2d %10d-%2d\n",students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,students[i].birthday.month,students[i].comingday.year,students[i].comingday.month);
getchar();
break;
30、 }break;
case 2: printf("\n 請輸入要查詢的學生的姓名:");
scanf("%s",reserch);
for(i=0;i 31、月(yyyy-mm)\n");
printf("----------------------------------------------------------------------------\n");
printf("%6s %8s %3s %4d %10d-%2d %10d-%2d\n",students[i].num,students[i].name,students[i].sex,students[i].age,students[i].birthday.year,students[i]. 32、birthday.month,students[i].comingday.year,students[i].comingday.month);
getchar();
break;
}break;
}
if(i==sum) {printf("\n 該學生不存在"); getchar();}
printf("\n\n 繼續(xù)查詢嗎?( Y/N(選擇N則返回主菜單) )");
choice=getchar();
if(choice==Y||choice==y)
{ flag=1;
printf("\n 繼續(xù)修改!\n"); 33、 }
else flag=0;
}while(flag==1);
printf("\n");
}
void sort(struct student_type students[],int sum) /*排序模塊*/
{ int i,j;
struct student_type t;
system("cls");
for(i=0;i 34、
students[i]=students[j];
students[j]=t; } }
printf("\n按學號排序:\n\n");
printf("\n ----學生信息表---- \n\n");
printf("學生學號--學生姓名--學生性別--學生年齡--出生年月(yyyy-mm)--入學年月(yyyy-mm)\n");
printf("----------------------------------------------------------------------------\n 35、");
for(i=0;i 36、------------------------------------------------------\n"); }
getchar();
printf("\n 按回車鍵返回主菜單!");
getchar();
}
int del(struct student_type students[],int sum) /*刪除模塊*/
{ int i,j,k=0;
char del_num[8];
system("cls");
printf("請輸入需要刪除的學生信息的學號\n\n");
scanf("%s",del_num); 37、
for(i=0;i 38、intf("刪除成功:\n");
getchar();
printf("\n 按回車鍵返回主菜單!");
getchar();
return(sum-1); }
}
/*添加模塊*/
void add(struct student_type students[],int *sum)
{ int i,flag; char choice;
system("cls");
i=(*sum);
do
{if(i 39、:");
scanf("%s",students[i].num);
if(students[i].num==0) break;
printf("\n 學生姓名:");
scanf("%s",students[i].name);
printf("\n 學生性別(男為m,女為w):");
scanf("%s",students[i].sex);
printf("\n 學生年齡:");
scanf("%d",&students[i].age);
printf("\n 學生出生年 40、月(yyyy-mm):");
scanf("%d-%d",&students[i].birthday.year,&students[i].birthday.month);
printf("\n 學生入學年月(yyyy-mm):");
scanf("%d-%d",&students[i].comingday.year,&students[i].comingday.month);
(*sum)++;
i=(*sum);
getchar();
printf("\n 成功添加一個學生的信息!\ 41、n");
getchar();
printf("\n 是否繼續(xù)添加??( Y/N(選擇N則返回主菜單) )\n");
choice=getchar();
if(choice==Y||choice==y)
{ flag=1;
printf("\n 繼續(xù)添加!\n"); }
else flag=0; }
else { printf("\n 返回主菜單\n"); break;}
}while(flag==1);
}
void main()
{ int choice,sum;
/ 42、/system("color ")
struct student_type students[MAX];
sum=read_file(students)-1;
if(sum==0)
{ printf("按回車鍵開始錄入基本庫存信息!");
getchar();
sum=input(students);
save_file(students,sum); }
do
{ system("cls");
printf("\n *************學生信息管理系統(tǒng)*************\n\n") 43、;
printf(" 1.重新錄入學生信息 \n\n");
printf(" 2.查詢學生信息 \n\n");
printf(" 3.輸出學生信息 \n\n");
printf(" 4.添加學生信息 \n\n");
printf(" 5.排序?qū)W生信息 \n 44、\n");
printf(" 6.修改學生信息 \n\n");
printf(" 7.刪除學生信息 \n\n");
printf(" 0.退出系統(tǒng) \n\n");
printf(" 請選擇您要執(zhí)行的操作(0-7)\n");
scanf("%d",&choice);
switch(choice)
{ case 1: sum=input 45、(students); save_file(students,sum); break;
case 2: reserch(students,sum); break;
case 3: save_file(students,sum); output(students,sum); break;
case 4: add(students,&sum); save_file(students,sum); break;
case 5: sort(students,sum); break;
case 6: modify(students,sum); save_file(students,sum); break;
case 7: sum=del(students,sum); save_file(students,sum); break;
case 0: break; }
}while(choice!=0);
save_file(students,sum);
}
八、參考文獻
王曙燕.《C語言程序設計》.北京:科技出版社.2008
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2023年六年級數(shù)學下冊6整理和復習2圖形與幾何第7課時圖形的位置練習課件新人教版
- 2023年六年級數(shù)學下冊6整理和復習2圖形與幾何第1課時圖形的認識與測量1平面圖形的認識練習課件新人教版
- 2023年六年級數(shù)學下冊6整理和復習1數(shù)與代數(shù)第10課時比和比例2作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊4比例1比例的意義和基本性質(zhì)第3課時解比例練習課件新人教版
- 2023年六年級數(shù)學下冊3圓柱與圓錐1圓柱第7課時圓柱的體積3作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊3圓柱與圓錐1圓柱第1節(jié)圓柱的認識作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊2百分數(shù)(二)第1節(jié)折扣和成數(shù)作業(yè)課件新人教版
- 2023年六年級數(shù)學下冊1負數(shù)第1課時負數(shù)的初步認識作業(yè)課件新人教版
- 2023年六年級數(shù)學上冊期末復習考前模擬期末模擬訓練二作業(yè)課件蘇教版
- 2023年六年級數(shù)學上冊期末豐收園作業(yè)課件蘇教版
- 2023年六年級數(shù)學上冊易錯清單十二課件新人教版
- 標準工時講義
- 2021年一年級語文上冊第六單元知識要點習題課件新人教版
- 2022春一年級語文下冊課文5識字測評習題課件新人教版
- 2023年六年級數(shù)學下冊6整理和復習4數(shù)學思考第1課時數(shù)學思考1練習課件新人教版