版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
C語言程序設(shè)計實驗報告PAGE17C語言課程設(shè)計實驗報告一、設(shè)計目的:學生信息包括:學號、姓名、性別、系名、班級名、出生年月、住址、電話號碼。設(shè)計一學生信息管理系統(tǒng),使之能提供以下功能:1.系統(tǒng)以菜單方式工作;2.學生信息錄入功能(輸入);3.學生信息瀏覽功能(輸出);4.學生信息檢索功能;5.學生信息的刪除與修改功能;二、總體設(shè)計思路:1>程序設(shè)計組成框圖主菜單主菜單添加新的學生信息瀏覽所有學生信息檢索學生信息按學號檢索按姓名檢索修改此同學信息刪除此同學信息檢索信息庫添加新的學生信息刪除所有記錄保存并退出2>N-S流程圖case‘4’case‘4’case‘3’Case’2’case‘1’結(jié)束調(diào)用add()添加新的學生信息fileopen()Menu()輸入選擇x調(diào)用scan()瀏覽所有學生信息退出系統(tǒng)調(diào)用res()檢索學生信息x開始filesave()三、詳細設(shè)計說明:1>頭文件#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>2>數(shù)入口說明main();主函數(shù);voidmenu();主菜單界面;voidadd();添加新的學生信息;voidprint(inti);打印學生信息;voidscan();查找學生信息;voidres();檢索學生信息界面;voidres_name();按姓名檢索;voidres_num();按學號檢索;voiddel(inti);刪除學生信息;voidmodify(inti);修改學生信息;voidfileopen();打開文件;voidfilesave();保存文件;2>調(diào)用關(guān)系add()menu()add()menu()add()fileopen()add()fileopen()res()add()res()add()menu()scan()menumenu()main()main()modify(inti)modify(inti)res_name()res()del(intidel(inti)menu()res_nummenu()res_num()filesave()4.調(diào)試與測試:編譯工具1.C/C++程序設(shè)計學習與實驗系統(tǒng)2.Tc3.VC++6.0均通過調(diào)試!主菜單添加新的學生信息瀏覽所有學生信息檢索信息庫繼續(xù)查找下一條修改學生信息刪除信息庫所有記錄五、調(diào)試中所遇到的問題及解決方法1>問題:程序退出后,再次打開,上次輸入的數(shù)據(jù)無法保存。解決:調(diào)用fileopen()與filesave()保存文件數(shù)據(jù),方便第二次打開程序時仍能調(diào)用上次輸入的數(shù)據(jù)。2>問題:跳出的界面與選擇分支中的對應(yīng)項不符合。解決:改getchar()為getch(),頭文件中加”conio.h”.因為getchar()從輸入輸出流中一次只能讀取一個字符,而且需要以回車來確認輸入。本文件中多次用到getchar(),鍵盤緩沖區(qū)的’\n’會被下次調(diào)用getchar()時接收。而getch()則不會,從鍵盤上讀入一個數(shù)據(jù),不給回顯,不需要回車確認,按下鍵就實現(xiàn)了函數(shù)。3>問題:誤輸入X,導致退出。解決:加標志變量flag=1,用while(flag)循環(huán)switch語句,當正確輸入時,flag=1,跳出循環(huán)。4>問題:檢索時只能查到第一個學生信息。解決:定義數(shù)組log(100)記錄符合的結(jié)構(gòu)體數(shù)組。循環(huán)打印。5>問題:不能刷新界面。解決:調(diào)用system(“cls”)清屏函數(shù)。6>問題:刪除某項信息,返回主函數(shù)時不能暫停。解決:調(diào)用system(“PAUSE”)暫停函數(shù)。六、程序源碼#include"stdio.h"#include"string.h"#include"stdlib.h"#include"conio.h"voidmenu();//聲明所有函數(shù);voidadd();voidprint(inti);voidscan();voidres();voidres_name();voidres_num();voiddel(inti);voidmodify(inti);voidfileopen();voidfilesave();;//定義全局變量x,減少代碼量;intn=0;//定義全局變量n,代表信息條數(shù);structstudent//定義結(jié)構(gòu)體數(shù)組stu[100];{ charnum[15]; charname[30]; charsex[2]; charxi[30]; charban[10]; charbirth[10]; charaddress[30]; chartel[20];}stu[100];voidmain()//主函數(shù);{ fileopen(); menu();//調(diào)用menu()函數(shù),打開主界面; filesave();}voidfileopen()//打開data文件;{ FILE*fp; inti; if((fp=fopen("data","r+"))==NULL)//若無data文件,則新建; fp=fopen("data","w+"); for(i=0;i<100;i++)//讀取數(shù)據(jù); fread(&stu[i],sizeof(structstudent),1,fp); fread(&n,4,1,fp); fclose(fp);}voidmenu()//主菜單;{intflag=1;//定義標志標量flag; system("cls");//清屏函數(shù);printf("┌────────────────────┐\n");//主界面;printf("│☆歡迎登錄學生信息管理系統(tǒng)★│\n");printf("││\n");printf("│1.添加新的學生信息│\n");printf("│2.瀏覽所有學生信息│\n");printf("│3.檢索學生信息│\n");printf("│4.保存并退出系統(tǒng)│\n");printf("││\n");printf("│byrlk│\n");printf("└────────────────────┘\n");while(flag)//防止用戶誤選導致退出;switch(getch())//用switch分支選擇語句;getch()獲取用戶鍵入值; {case'1':flag=0;add();break;//當用戶選擇1時,調(diào)用add()函數(shù),添加新的學生信息;case'2':flag=0;scan();break;//當用戶選擇2時,調(diào)用scan()函數(shù),瀏覽所有學生信息;case'3':flag=0;res();break;//當用戶選擇3時,調(diào)用res()函數(shù),檢索學生信息;case'4':flag=0;printf("√保存成功!");break;//當用戶選擇4時,調(diào)用flag()函數(shù),退出系統(tǒng);default:printf("※錯誤!請重新輸入..\n");//其它輸入,提示錯誤; }}voidadd()//信息添加函數(shù);{ intflag=1; system("cls");//清屏函數(shù); printf("──────────%2d───────────\n",n+1);//逐一輸入各項數(shù)據(jù); printf("*添加新的學生信息*\n"); printf("①學號:"); scanf("%s",&stu[n].num); printf("②姓名:"); scanf("%s",&stu[n].name); printf("③性別:"); scanf("%s",&stu[n].sex); printf("④系名:"); scanf("%s",&stu[n].xi); printf("⑤班級名:"); scanf("%s",&stu[n].ban);printf("⑥出生年月:");scanf("%s",&stu[n].birth);printf("⑦住址:");scanf("%s",&stu[n].address);printf("⑧電話號碼:");scanf("%s",&stu[n].tel);printf("──────────────────────\n");printf("\n√添加成功!\n\n☆請選擇:1.繼續(xù)添加2.返回主菜單\n");n++;//總信息量增加一項;while(flag)switch(getch()){ case'1':flag=0;add();break;//選擇'1',重新調(diào)用add(); case'2':flag=0;menu();break;//選擇'2',調(diào)用menu(),返回主菜單; default:printf("※錯誤!請重新輸入..\n");//其它輸入,提示錯誤;}}voidprint(inti)//學生信息打印函數(shù);{printf("──────────%2d──────────\n",i+1);printf("①學號:%s\n",stu[i].num);printf("②姓名:%s\n",stu[i].name);printf("③性別:%s\n",stu[i].sex);printf("④系名:%s\n",stu[i].xi);printf("⑤班級名:%s\n",stu[i].ban);printf("⑥出生年月:%s\n",stu[i].birth);printf("⑦住址:%s\n",stu[i].address);printf("⑧電話號碼:%s\n",stu[i].tel);printf("─────────────────────\n");}voidscan()//信息瀏覽函數(shù); { inti,flag=1; system("cls"); if(n==0)//當n==0時,信息庫中無記錄; { printf("──────────────────────\n");printf("當前信息庫記錄為0!\n");printf("──────────────────────\n");printf("☆請選擇:1.添加新的學生信息2.返回主菜單\n");while(flag) switch(getch()) { case'1':flag=0;add();break; case'2':flag=0;menu();break; default:printf("※錯誤!請重新輸入..\n"); } } else//當n不為0時,打印信息; {printf("**********目前信息庫里共有%d條記錄.*********\n",n); for(i=0;i<n;i++)print(i); printf("☆請選擇:1.檢索信息庫2.添加新的學生信息\n"); printf("3.刪除所有記錄4.返回主菜單\n"); while(flag) switch(getch()) { case'1':flag=0;res();break; case'2':flag=0;add();break; case'3': flag=0; printf("\n!!!!!!!!!!!!警告:您將刪除信息庫所有記錄!!!!!!!!!!!!\n"); printf("\n☆請選擇:1.確認刪除2.返回\n"); flag=1; while(flag) switch(getch()){case'1':flag=0;n=0;printf("√已刪除!\n");system("PAUSE");scan();break; case'2':flag=0;scan(); default:printf("※錯誤!請重新輸入..\n"); }break; case'4':flag=0;menu();break; default:printf("※錯誤!請重新輸入..\n"); } } }voidmodify(inti)//信息修改函數(shù);{intflag=1; printf("────────────────────────\n");//信息修改界面; printf("☆請輸入你想修改的內(nèi)容:\n"); printf("1.學號2.姓名3.性別4.系名\n"); printf("5.班級名6.出生年月7.住址8.電話號碼\n"); printf("────────────────────────\n"); while(flag)switch(getch()){case'1':flag=0;printf("請重新輸入學號:");scanf("%s",&stu[i].num);break;case'2':flag=0;printf("請重新輸入姓名:");scanf("%s",&stu[i].name);break;case'3':flag=0;printf("請重新輸入性別:");scanf("%s",&stu[i].sex);break;case'4':flag=0;printf("請重新輸入系名:");scanf("%s",&stu[i].xi);break;case'5':flag=0;printf("請重新輸入班級名:");scanf("%s",&stu[i].ban);break;case'6':flag=0;printf("請重新輸入出生年月:");scanf("%s",&stu[i].birth);break;case'7':flag=0;printf("請重新輸入住址:");scanf("%s",&stu[i].address);break;case'8':flag=0;printf("請重新輸入電話號碼:");scanf("%s",&stu[i].tel);break;default:printf("※錯誤!請重新輸入..");}printf("√修改成功!\n修改后的學生信息:\n");print(i);system("PAUSE");//暫停函數(shù):按任意鍵繼續(xù)..;printf("☆請選擇:1.繼續(xù)修改此學生信息2.查看下一條相關(guān)信息3.返回主菜單\n");flag=1;while(flag)switch(getch()){ case'1':flag=0;modify(i);break; case'2':flag=0;break; case'3':flag=0;menu(); default:printf("※錯誤!請重新輸入..\n");}}voiddel(inti)//信息刪除函數(shù);{ inta,flag=1; printf("\n!!!!!!!!!!!!警告:您將刪除此條學生信息!!!!!!!!!!!!"); printf("\n☆請輸入:1.繼續(xù)刪除"); printf("\n2.不刪除,返回主菜單\n");while(flag)switch(getch()) { case'1':flag=0;for(a=i;a<n-1;a++)//拷貝后一個學生信息到前一個人上。 { strcpy(stu[a].num,stu[a+1].num);strcpy(stu[a].name,stu[a+1].name); strcpy(stu[a].sex,stu[a+1].sex); strcpy(stu[a].xi,stu[a+1].xi); strcpy(stu[a].ban,stu[a+1].ban); strcpy(stu[a].birth,stu[a+1].birth); strcpy(stu[a].address,stu[a+1].address); strcpy(stu[a].tel,stu[a+1].tel); } n--; printf("√刪除成功!\n");//總信息量減少一項; system("PAUSE"); menu(); break; case'2': flag=0; system("PAUSE");//暫停函數(shù):按任意鍵繼續(xù)..; menu();//返回主菜單; break; default:printf("※錯誤!請重新輸入..\n"); }}voidres_num()//按學號檢索函數(shù);{ inti,j=0,flag=1,log[100]; charxh[15]; system("cls"); printf("******************************************\n");printf("\n☆請輸入要檢索的學號:"); scanf("%s",&xh); for(i=0;i<n;i++) if(!strcmp(stu[i].num,xh))//字符串比較函數(shù); while(j<100){log[j]=i;j++;break;}//記錄下相關(guān)的信息;if(!j)//信息庫中沒查找到所需信息; { printf("對不起,信息庫里沒要你想要查找的信息!\n"); printf("\n******************************************\n"); printf("\n☆請選擇:1.繼續(xù)查找2.返回主菜單\n");while(flag) switch(getch()) { case'1':flag=0;res();break; case'2':flag=0;menu();break; default:printf("※錯誤!請重新輸入..\n"); } } else { printf("\n在信息庫中共找到%d條相關(guān)信息..\n",j); for(i=0;i<j;i++) { flag=1; printf("\n第%d條\n",i+1); print(log[i]); printf("\n******************************************\n"); printf("\n☆請選擇:1.修改此學生信息2.刪除此學生信息\n"); printf("3.繼續(xù)查找下一條4.返回主菜單\n"); while(flag) switch(getch()) { case'1':flag=0;modify(log[i]);break; case'2':flag=0;del(log[i]);break; case'3':flag=0;break; case'4':flag=0;menu();break; default:printf("※錯誤!請重新輸入..\n"); } } printf("\n已到最后一條相關(guān)信息..\n"); system("PAUSE");//暫停函數(shù):按任意鍵繼續(xù)..; menu(); }}voidres_name()//按姓名檢索函數(shù);{ inti,j=0,flag=1,log[100]; charmz[20]; system("cls"); printf("******************************************\n");printf("\n☆請輸入要檢索的姓名:"); scanf("%s",&mz); for(i=0;i<n;i++) if(!strcmp(stu[i].name,mz))//字符串比較函數(shù); while(j<100){log[j]=i;j++;break;}//記錄下相關(guān)的信息;if(!j)//信息庫中沒查找到所需信息; { printf("對不起,信息庫里沒要你想要查找的信息!\n"); printf("\n******************************************\n"); printf("\n☆請選擇:1.繼續(xù)查找2.返回主菜單\n");while(flag) switch(getch()) { case'1':flag=0;res();break; case'2':flag=0;menu();break; default:printf("※錯誤!請重新輸入..\n"); } } else { printf("\n在信息庫中共找到%d條相關(guān)信息..\n",j); for(i=0;i<j;i++) { flag=1; printf("\n第%d條\n",i+1); print(log[i]); printf("\n******************************************\n"); printf("\n☆請選擇:1.修改此學生信息2.刪除此學生信息\n"); printf("3.繼續(xù)查找下一條4.返回主菜單\n"); while(flag) switch(getch()) { case'1':flag=0;modify(log[i]);break; case'2':flag=0;del(log[i]);break; case'3':flag=0;break; case'4':flag=0;menu();break; default:printf("※錯誤!請重新輸入..\n"); } } printf("\n※已到最后一條相關(guān)信息..\n"); system("PAUSE"); menu(); }}voidres()
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 交通設(shè)施銷售合同
- 汽車吊車租賃合同文本
- 2025年不動產(chǎn)贈與合同附條件范文(2篇)
- 2025委托合同供住宅區(qū)委托管理用1
- 二零二五年度體育組織退休教練員返聘訓練合同
- 收藏硬幣贈與合同(2篇)
- 二零二五年度國際貨運運輸車司機雇傭合同與多語言支持
- 2025版南京琴行教師崗位競聘與管理合同4篇
- 二零二五版高檔別墅門窗定制安裝及保養(yǎng)合同2篇
- 2025年度股權(quán)代持協(xié)議書:房地產(chǎn)股權(quán)代持與開發(fā)合同
- 2025福建新華發(fā)行(集團)限責任公司校園招聘30人高頻重點提升(共500題)附帶答案詳解
- 山東鐵投集團招聘筆試沖刺題2025
- 真需求-打開商業(yè)世界的萬能鑰匙
- 2025年天津市政集團公司招聘筆試參考題庫含答案解析
- GB/T 44953-2024雷電災(zāi)害調(diào)查技術(shù)規(guī)范
- 2024-2025學年度第一學期三年級語文寒假作業(yè)第三天
- 2024年列車員技能競賽理論考試題庫500題(含答案)
- 心律失常介入治療
- 《無人機測繪技術(shù)》項目3任務(wù)2無人機正射影像數(shù)據(jù)處理
- 6S精益實戰(zhàn)手冊
- 展會場館保潔管理服務(wù)方案
評論
0/150
提交評論