




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
程序設計報告(2010/2011學年第一學期)題目:學生信息管理系統專業通信工程學生姓名賈瑋瑋班級學號B09010630指導教師王蔚指導單位計算機學院計算機軟件教學中心日期2010年10月29日一、課題名稱學生信息管理系統二、課題內容和要求1、課題描述:已知有20個學生記錄(包括學號、姓名、成績)的文件student.dat,所有學生以學號從小到大排序(該文件自行建立)。要求編程序實現查詢、排序、插入、刪除諸功能。2、基本要求:A.要求顯示如下界面****************************************1--------------查詢2--------------排序3--------------插入4--------------刪除****************************************通過選擇1-4來確定要做哪一個操作。B.若選1,則出現如下界面****************************************1.1----------按學號查詢1.2----------按姓名查詢1.3----------按成績查詢****************************************通過選擇1.1-1.3來確定要做哪一個操作,其中:按學號查詢用二分法實現;按姓名查詢用順序法實現;按成績查詢實現查詢成績小于m分的學生;找到該生將學生記錄輸出到屏幕,若查無此人,輸出相關信息。C.若選2,則按成績從大到小排序,姓名,學號順序也隨之調整。D.若選3,將一個新學生記錄按學號順序插入,并把結果保存到文件student.dat中。E.若選4,刪除指定學生的記錄,并把結果保存到文件student.dat中。F.以上各個功能均編寫成子函數,由主函數調用實現。三、需求分析1、登錄,提供兩種登錄身份,老師和學生,老師身份登錄需要密碼驗證,這樣可以為不同的身份提供不同的使用權限,學生身份登錄不可以插入或刪除學生信息。2、信息生成,從student.dat文件中讀取學生信息,包括用戶學號、姓名、成績。3、主菜單,屏幕輸出菜單用于提示用戶選擇功能,根據用戶輸入的選項,運行不同的函數。功能包括:查詢、排序、插入、刪除、重新登錄、退出系統。4、查詢,屏幕輸出子菜單用于提示用戶選擇功能,根據用戶輸入的選項,運行不同的函數。功能包括:按學號查詢、按姓名查詢、按成績查詢通。5、排序,將學生信息按學號從小到大排序并輸出所有學生信息。6、插入,輸入“0000”可以返回上一層,輸入要插入的學生信息的學號,驗證此學號是否存在,存在則顯示提示信息,不存在則繼續輸入該信息的姓名和成績,并儲存到student.dat文件中,完成后輸出提示信息7、刪除,輸入“0000”8、重新登錄,返回登錄程序,供用戶切換登錄身份。9、退出系統,關閉程序。10、按學號查詢和按姓名查詢,輸入“0000”可以返回上一層,輸入要查詢的學生信息的學號或姓名,查找到則輸出學生信息,若未11、按成績查詢,輸入“0000”可以返回上一層,輸入一個成績,查詢小于該成績的所有學生信息,并輸出,若未12、返回主菜單,返回主菜單界面。四、概要設計1、結構體structrecord{charxuehao[LEN+1];/*學號*/charxingming[LEN+1];/*姓名*/intchengji;/*成績*/}stu[N];2、函數申明voiddenglu();/*登錄函數*/voidmima();/*密碼驗證函數*/voidreadfile();/*信息生成函數*/voidmenu();/*主菜單函數*/voidchaxun();/*查詢函數*/voidpaixu();/*排序函數*/voidcharu();/*插入函數*/voidshanchu();/*刪除函數*/voiddisplay();/*顯示函數*/voidsave();/*保存函數*/voidxuehaopaixu();/*按學號排序函數*/3、算法流程圖開始開始登錄老師身份成功登錄查詢排序插入刪除退出系統重新登錄按姓名按學號按成績NY返回主菜單主菜單結束五、詳細設計#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<ctype.h>#defineLEN20/*學號、姓名和密碼最大字符數*/#defineN200/*最大學生人數*/structrecord{charxuehao[LEN+1];/*學號*/charxingming[LEN+1];/*姓名*/intchengji;/*成績*/}stu[N];intk=1,x=1,m=0,n;/*定義全局變量,k與退出系統功能有關,x和m用來標示用戶身份,n為實際存儲的信息數目*/voiddenglu();/*函數聲明*/voidmima();voidreadfile();voidmenu();voidchaxun();voidpaixu();voidcharu();voidshanchu();voiddisplay();voidsave();voidxuehaopaixu();intmain()/*主函數*/{printf("歡迎使用學生信息管理系統!\n");denglu();readfile();while(k)/*用來實現退出系統功能,當k==0時,循環結束*/menu();system("pause");return0;}voiddenglu()/*登錄函數*/{while(m==0&&x==1){printf("請輸入您的登錄身份,老師為0,學生為1(老師身份登錄需要密碼驗證):");scanf("%d",&m);while(m==0){mima();if(m==0)break;}}}voidmima()/*密碼驗證函數*/{charpassword[LEN+1];intz=0;printf("請輸入密碼,最多15位:");unsignedcharc;while((c=getch())!='\r')/*無顯示輸出*/{if(z<LEN&&isprint(c)){password[z++]=c;putchar('*');}elseif(z>0&&c=='\b')/*實現退格功能*/ {--z;putchar('\b');putchar('\0');putchar('\b');/*并刪除顯示*號*/ }}putchar('\n');password[z]='\0';if(strcmp(password,"12345678")==0){printf("登錄成功!\n");m=1;/*登錄成功,跳出denglu函數的while循環*/x=0;}elseprintf("密碼錯誤!\n");}voidreadfile()/*建立信息函數*/{char*p="student.dat";FILE*fp;inti=0;if((fp=fopen("student.dat","r"))==NULL){printf("打開文件%s失?。“慈我怄I推出!",p);system("pause");exit(0);}while(fscanf(fp,"%s%s%d",stu[i].xuehao,stu[i].xingming,&stu[i].chengji)==3)i++;fclose(fp);n=i;printf("錄入完畢!\n");}voidmenu()/*菜單函數*/{intnum,e=0;/*e為重新登錄功能的參數*/printf("\n學生信息管理系統\n\n");printf("**********系統功能菜單**********\n");printf("********************************\n");printf("*******1--------------查詢******\n");printf("*******2--------------排序******\n");printf("*******3--------------插入******\n");printf("*******4--------------刪除******\n");printf("*******5--------------重新登錄**\n");printf("*******6--------------退出系統**\n");printf("********************************\n");while(1){printf("請選擇主菜單編號:");scanf("%d",&num);switch(num){case1:chaxun();break;case2:paixu();break;case3:if(m==1&&x==0)/*權限判定,老師登錄為m==1,x==0;學生登錄為m==0,x==1*/charu();elseprintf("您的權限不夠!\n");break;case4:if(m==1&&x==0)shanchu();else printf("您的權限不夠!\n");break;case5:e=1;break;case6:k=0;break;default:printf("請在1-6之間選擇!\n");break;}if(e==1||k==0)break;}if(e==1){m=0;/*還原登錄前的參數值*/x=1;denglu();}}voidchaxun()/*查詢函數*/{inti,j,item,flag,left,right,mid;chars1[LEN+1];/*以姓名和學號最長長度+1為準*/printf("********************************\n");printf("*****1.1---------按學號查詢*****\n");printf("*****1.2---------按姓名查詢*****\n");printf("*****1.3---------按成績查詢*****\n");printf("*****1.4---------回到主菜單*****\n");printf("********************************\n");while(1){printf("請選擇子菜單編號:");scanf("%d",&item);flag=0;switch(item){case1:xuehaopaixu();/*首先將學號按從小到大排序,然后運用二分法查找*/printf("請輸入要查詢的學生的學號,若要返回上層請輸入“0000“:");scanf("%s",s1);if(strcmp(s1,"0000")==0)break;left=0;right=n-1;while(left<=right) {mid=(left+right)/2;if(strcmp(stu[mid].xuehao,s1)==0) {printf("該學生的信息為:\n學號姓名成績\n");printf("%-12s%-12s%d\n",stu[mid].xuehao,stu[mid].xingming,stu[mid].chengji);flag=1;left=right+1;/*一旦查詢到,就跳出循環*/ }elseif(strcmp(stu[mid].xuehao,s1)==1)right=mid-1;elseleft=mid+1; }if(flag==0)printf("該學號不存在!\n");break;case2:printf("請輸入要查詢的學生的姓名,若要返回上層請輸入“0000“:");scanf("%s",s1);if(strcmp(s1,"0000")==0)break;for(i=0;i<n;i++)if(strcmp(stu[i].xingming,s1)==0) {flag=1;printf("該學生的信息為:\n學號姓名成績\n");printf("%-12s%-12s%d\n",stu[i].xuehao,stu[i].xingming,stu[i].chengji);i=n;/*一旦查詢到,就跳出循環*/ }if(flag==0)printf("該姓名不存在!\n");break;case3:printf("請輸入要查詢的學生的成績,若要返回上層請輸入“0000“:");scanf("%d",&j);if(j==0000)break;for(i=0;i<n;i++)if(stu[i].chengji<j) {flag=1;printf("該學生的信息為:\n學號姓名成績\n");printf("%-12s%-12s%d\n",stu[i].xuehao,stu[i].xingming,stu[i].chengji); }if(flag==0)printf("小于%d的成績不存在\n",j);break;case4:return;default:printf("請在1-4之間選擇!\n");break;}}}voidpaixu()/*排序函數*/{inti,j;structrecordtemp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(stu[i].chengji<stu[j].chengji){temp=stu[i];stu[i]=stu[j];stu[j]=temp;}}}display();}voidcharu()/*插入函數*/{inti,flag=0;chars1[LEN+1];printf("請輸入新學生記錄的學號,若要返回上層請輸入“0000“:");scanf("%s",s1);if(strcmp(s1,"0000")==0)return;for(i=0;i<n;i++){if(strcmp(stu[i].xuehao,s1)==0){flag=1;printf("該學號已存在!\n");}if(flag==1)break;}if(flag==0){for(i=0;i<LEN+1;i++)stu[n].xuehao[i]=s1[i];printf("請輸入新學生記錄姓名、成績:\n");scanf("%s%d",stu[n].xingming,&stu[n].chengji);n++;xuehaopaixu();save();printf("錄入成功!\n");}}voidshanchu()/*刪除函數*/{inti,j,flag=0;chars1[LEN+1];printf("請輸入要刪除學生的學號,若要返回上層請輸入“0000“:");scanf("%s",s1);if(strcmp(s1,"0000")==0)return;for(i=0;i<n;i++){if(strcmp(stu[i].xuehao,s1)==0){flag=1;for(j=i;j<n-1;j++)stu[j]=stu[j+1];n--;save();printf("刪除成功!\n");}if(flag==1)break;}if(flag==0)printf("該學號不存在!\n");}voiddisplay()/*顯示函數*/{inti;printf("所有學生的信息為:\n學號姓名成績\n");for(i=0;i<n;i++)printf("%-12s%-12s%d\n",stu[i].xuehao,stu[i].xingming,stu[i].chengji);}voidsave()/*保存函數*/{inti;FILE*fp;fp=fopen("student.dat","w");for(i=0;i<n;i++)fprintf(fp,"%s%s%d\n",stu[i].xuehao,stu[i].xingming,stu[i].chengji);fclose(fp);}voidxuehaopaixu()/*按學號排序函數*/{inti,j,r;structrecordtemp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){r=strcmp(stu[i].xuehao,stu[j].xuehao);if(r==1) {temp=stu[i];stu[i]=stu[j];stu[j]=temp; }}}}六、測試數據及其結果分析1、學生信息:B09010601愛因斯坦100B09010606霍金97B09010616麥克斯韋96B09010603萊布尼茨95B09010602牛頓94B09010617普朗克94B09010607蔡定鄂93B09010605李政道92B09010604楊振寧90B09010615伽利略90B09010613笛卡爾89B09010608惠更斯89B09010614卡文迪許88B09010610波爾87B09010612玻爾茲曼85B09010609赫茲85B09010620安培84B09010611多普勒83B09010618湯姆遜82B09010619菲涅耳80B09010620安培862、程序運行程序運行,首先進入登錄界
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備驗收復習試題(一)
- 《俄國十月革命》蘇聯社會主義道路的探索課件-
- 安裝燈具的合同范本
- 2025企業投資居間合同范本
- 課堂上的感恩課件
- 酒店行業銷售部月度匯報
- 2025年臨時工勞動合同標準范本
- 課題競標管理辦法解讀
- 汽車行業外部環境分析
- 員工培訓重要性
- 2018年四川省高考數學試卷(文科)(全國新課標Ⅲ)
- 前列腺增生患者的護理查房課件
- 2023年四川農信(農商行)招聘筆試真題
- 呼蘭河傳(2022年黑龍江牡丹江中考語文試卷記敘文閱讀題及答案)
- 小學英語“教學評一體化”實施
- 危險化學品出入庫管理制度
- 醫學課件新生兒黃疸5
- 2024年中考英語作文熱點主題:人工智能滿分范文10篇精彩表達25句
- 2025年呼和浩特市重點中學中考領航2020大二輪復習數學試題模擬含解析
- 水泥攪拌樁施工記錄-自動計算
- 全國大學生網絡安全知識競賽題庫及答案
評論
0/150
提交評論