




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
學(xué)生檔案管理系統(tǒng)1內(nèi)容與要求【問題描述】設(shè)計(jì)一個(gè)學(xué)生檔案管理系統(tǒng),對(duì)學(xué)生檔案進(jìn)行管理。每個(gè)學(xué)生的信息包括:學(xué)號(hào)、姓名、性別、出生年月、是否黨員、號(hào)碼、家庭住址、各門課成績〔每門課包括課程名與成績〕。系統(tǒng)要求包含如下功能:1。創(chuàng)立功能:初始輸入每個(gè)學(xué)生的信息〔學(xué)號(hào)、姓名、性別、出生年月、是否黨員、號(hào)碼、家庭住址〕并保存。2。顯示功能:顯示全部學(xué)生的信息〔包括各門課的成績〕。3。輸入某課程成績功能:按學(xué)號(hào)、成績輸入選修某門課的所有學(xué)生的成績〔說明:并不是所有學(xué)生都選同一門課,每個(gè)學(xué)生選的課可不一樣〕。4。統(tǒng)計(jì)平均成績功能:計(jì)算每個(gè)學(xué)生的平均成績。5。查找功能:按姓名或?qū)W號(hào)查找學(xué)生記錄,并顯示。6。排序功能:按學(xué)號(hào)或平均成績進(jìn)行排序,并顯示。7。插入功能:插入一條學(xué)生記錄。8。刪除功能:刪除指定學(xué)生的記錄。要求提供一個(gè)界面來調(diào)用各個(gè)功能,界面應(yīng)盡可能清晰美觀。【具體要求】1。系統(tǒng)應(yīng)以菜單方式工作,舉例如下:程序運(yùn)行后顯示如下主界面:****************************************1--------------創(chuàng)立2--------------顯示3--------------輸入成績4--------------統(tǒng)計(jì)成績5--------------查找6--------------排序7--------------插入8--------------刪除9--------------退出****************************************通過選擇1-9來確定要做哪一個(gè)操作。假設(shè)選5,那么出現(xiàn)如下界面:****************************************1----------按學(xué)號(hào)查詢2----------按姓名查詢****************************************2。要求采用順序存儲(chǔ)結(jié)構(gòu)存儲(chǔ)學(xué)生根本信息,每個(gè)學(xué)生的信息是一個(gè)數(shù)據(jù)元素,而其中每個(gè)學(xué)生各門課的成績用單鏈表存儲(chǔ)結(jié)構(gòu)存儲(chǔ)?!緦?shí)現(xiàn)提示】順序表每個(gè)數(shù)據(jù)元素包括學(xué)號(hào)、姓名、性別、出生年月、是否黨員、號(hào)碼、家庭住址、成績鏈表的頭指針;成績鏈表每個(gè)結(jié)點(diǎn)的數(shù)據(jù)域包括課程名與成績?!緶y試數(shù)據(jù)】自己設(shè)計(jì),報(bào)告上要求給出各種情況的數(shù)據(jù)測試結(jié)果?!緦?shí)現(xiàn)說明】有能力的同學(xué)在完成上述功能的根底上,可以充分發(fā)揮自己的想象力增加并完善該系統(tǒng)的功能,如采用文件來存儲(chǔ)學(xué)生信息,增加輸出某門課的成績記錄單功能等等。2總體設(shè)計(jì)一、設(shè)計(jì)步驟分析問題,給出數(shù)學(xué)模型,設(shè)計(jì)相應(yīng)的數(shù)據(jù)結(jié)構(gòu)?!?〕按照課程要求,可以將學(xué)生根本信息以順序存儲(chǔ)方式存放在一數(shù)組中,而學(xué)生根本信息由于有多個(gè)工程,可以將單個(gè)學(xué)生的信息以結(jié)構(gòu)體的方式存儲(chǔ);(2)輸入的成績可以在每個(gè)通過在結(jié)構(gòu)體中參加一鏈表來實(shí)現(xiàn)存儲(chǔ)多門課程的目的,為防止每插入一門課程就需要遍歷一次鏈表,此處應(yīng)以隊(duì)列的方式來存儲(chǔ)課程;〔3〕統(tǒng)計(jì)成績計(jì)算出成績之后為方便后續(xù)的顯示平均成績及排序須在每個(gè)學(xué)生的信息中再參加平均成績一項(xiàng);二.功能模塊及調(diào)用關(guān)系說明 〔1〕創(chuàng)立根本信息:通過fopen()以讀的方式翻開“basedata.dat〞文件,再用fscanf()將文檔中的根本信息存儲(chǔ)到p1數(shù)組中;〔2〕顯示學(xué)生信息:可以通過遍歷數(shù)組p1來進(jìn)行輸出,假設(shè)根本信息為空,那么提示先創(chuàng)立信息,假設(shè)學(xué)生課程信息未存入那么不進(jìn)行顯示,假設(shè)課程信息已存入,那么在遍歷數(shù)組的根底上再對(duì)每個(gè)數(shù)組元素中的鏈表進(jìn)行遍歷輸出;〔3〕輸入成績:先輸入課程代號(hào),通過strcmp()字符串比擬判斷再同〔1〕翻開相應(yīng)文件并將信息寫入一中間變量里,再通過中間變量中寫入的學(xué)號(hào)查找到該學(xué)生,并將這條課程信息用EnQueue〔〕存到該學(xué)生的課程鏈表中,假設(shè)該課程已存在與該學(xué)生的課程鏈表中那么不進(jìn)行重復(fù)寫入,其中用isExitcNo()判斷是否存在該課程;〔4〕統(tǒng)計(jì)成績:通過遍歷每個(gè)學(xué)生的課程鏈表計(jì)算并存儲(chǔ)每個(gè)學(xué)生的平均成績,假設(shè)未錄入根本信息那么提示先創(chuàng)立根本信息,假設(shè)課程鏈表為空,那么提示先輸入成績;〔5〕查找:1.按學(xué)號(hào)查詢:建立一個(gè)for循環(huán),通過輸入的學(xué)號(hào)找到相應(yīng)的學(xué)生,并輸出該學(xué)生的信息, 2.按姓名查詢:建立一個(gè)for循壞,通過輸入的姓名找到相應(yīng)學(xué)生,并輸出該學(xué)生的信息,假設(shè)并未創(chuàng)立根本信息,那么提示先創(chuàng)立根本信息;〔6〕排序:1.按學(xué)號(hào)排序:先將學(xué)號(hào)用sscanf()轉(zhuǎn)化為int型,再用插入排序法對(duì)數(shù)組進(jìn)行排序; 2.按平均成績排序:利用插入排序法對(duì)數(shù)組元素中的平均值比擬從而對(duì)數(shù)組進(jìn)行排序; 假設(shè)并未創(chuàng)立根本信息,那么提示先創(chuàng)立根本信息;〔7〕插入:先輸入一個(gè)學(xué)號(hào),用isNo()判斷輸入的是否為數(shù)字,假設(shè)輸入的并不為數(shù)字,那么提示其重新輸入,輸入學(xué)號(hào)后,假設(shè)該學(xué)號(hào)已經(jīng)存在,那么提示重新輸入;在學(xué)號(hào)輸入正確無誤的前提下,再輸入姓名,再輸入性別,用isGender()判斷輸入的是否是性別,假設(shè)不為性別,那么提示重新輸入,再輸入出生日期,用isNo判斷是否為數(shù)字,假設(shè)不為數(shù)字那么提示重新輸入,再輸入是否為黨員用isYN()判斷格式是否正確,假設(shè)格式錯(cuò)誤那么提示重新輸入,再輸入號(hào)碼,并用isNo()判斷是否為數(shù)字,假設(shè)不為數(shù)字那么提示重新輸入,最后再輸入地址;學(xué)生根本信息輸入完成后再輸入課程信息,課程信息記錄到數(shù)組元素的課程鏈表中;輸入完成后再用InsertFile〔〕將學(xué)生信息寫回到學(xué)生根本信息文檔及課程文檔中;〔8〕刪除:假設(shè)學(xué)生信息為空,那么提示先創(chuàng)立學(xué)生信息,學(xué)生信息不為空,那么輸入學(xué)號(hào),再通過輸入的學(xué)號(hào)查找到相應(yīng)的學(xué)生并刪除數(shù)組中該條學(xué)生信息,假設(shè)無法找到該學(xué)號(hào)那么提示無該學(xué)生,要求其重新輸入;刪除成績后再用reWFile〔〕將數(shù)組中的信息重新寫回到學(xué)生根本信息文檔及課程文檔中;〔9〕退出程序。詳細(xì)設(shè)計(jì)1〕實(shí)現(xiàn)概要設(shè)計(jì)中定義數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)structstudent{ //學(xué)生信息 charNo[10]; //學(xué)生學(xué)號(hào) charname[10]; //學(xué)生姓名 chargender[5]; //學(xué)生性別 charbrithday[8]; //學(xué)生生日 chartpartym[5]; //是否為黨員 charphoneNo[15]; //號(hào)碼 charaddr[20]; //學(xué)生地址 courses*front; //學(xué)生課程隊(duì)列的隊(duì)首 courses*rear; //學(xué)生課程隊(duì)列的隊(duì)首 intaverage; //學(xué)生所有課程的平均成績}structcourses{ //課程信息 charcNo[15]; //課程代號(hào) charsNo[10]; //課程中學(xué)生學(xué)號(hào) intdegree; //相應(yīng)學(xué)號(hào)學(xué)生的成績 courses*next;}2〕函數(shù)的算法實(shí)現(xiàn)〔1〕InitQueue(student&Q)函數(shù)的實(shí)現(xiàn)〔初始化隊(duì)列〕形參為隊(duì)列名稱;在函數(shù)中將用new生成新的節(jié)點(diǎn),并將隊(duì)頭和對(duì)位指向此節(jié)點(diǎn),再將頭節(jié)點(diǎn)的指針域置空。〔2〕EnQueue(student&Q,coursese)入隊(duì)函數(shù)的實(shí)現(xiàn)形參一個(gè)為隊(duì)列名稱,另一個(gè)為插入元素;先為入隊(duì)元素分配節(jié)點(diǎn)空間并用指針p指向該節(jié)點(diǎn),再將節(jié)點(diǎn)的數(shù)據(jù)域置為e然后將新節(jié)點(diǎn)插入到隊(duì)尾并修改隊(duì)尾指針,使隊(duì)尾指針指向下一個(gè)節(jié)點(diǎn)?!?〕GetLine(studentQ)輸出隊(duì)列函數(shù)的實(shí)現(xiàn)形參為隊(duì)列名稱;先設(shè)一個(gè)中間變量r作為節(jié)點(diǎn)指針,當(dāng)對(duì)首與隊(duì)尾相等時(shí),即隊(duì)列為空,那么提示課程信息為空,當(dāng)對(duì)列不為空時(shí),將r賦值為隊(duì)首所指向的指針域,在while循環(huán)中當(dāng)r不為空時(shí)分別輸出課程名稱及對(duì)應(yīng)課程的成績,再將r指向下一個(gè)節(jié)點(diǎn),當(dāng)r為空時(shí)即遍歷對(duì)列完成那么結(jié)束循環(huán)?!?〕CalculateAve(student&Q)計(jì)算平均成績的實(shí)現(xiàn)形參為隊(duì)列名稱,即為單個(gè)數(shù)組元素;設(shè)置一個(gè)變量n并置初值為0用于課程數(shù)的計(jì)數(shù),設(shè)一個(gè)中間變量r作為節(jié)點(diǎn)指針,將r賦值為隊(duì)首所指向的指針域,在while循環(huán)中當(dāng)r不為空時(shí)將每門課程成績相加,加完所有成績之后再將總成績除以課程數(shù)并將所得平均成績賦值給數(shù)組元素?!?〕isExitcNo(studentQ,char*cNo)判斷該課程是否存在于數(shù)組元素隊(duì)列中設(shè)一個(gè)flag做為標(biāo)志值設(shè)置初值為0,在for循環(huán)中對(duì)每個(gè)數(shù)組元素進(jìn)行遍歷,在循環(huán)過程中用strcmp()將該數(shù)組元素中已有課程代號(hào)與輸入課程代號(hào)進(jìn)行比擬,假設(shè)有相等的課程,那么將flag值置為1,并直接結(jié)束循環(huán),最后返回flag〔6〕isNo(char*No)判斷是否為數(shù)字假設(shè)字符串全為數(shù)字,那么函數(shù)返回1,假設(shè)字符串中有一個(gè)不為數(shù)字,那么返回0.〔7〕isGender(char*gender)判斷是否為性別假設(shè)字符串判斷為“男“或〞女“,那么函數(shù)返回1,反之那么返回0.〔8〕InsertFile(studentQ)插入文件將文件用fopern()以添加的方式翻開,用fprintf()將插入的信息寫入文件〔9)reWFile(student*p1,inti)寫回文件將文件用fopen()以寫的方式翻開,用fprintf()將刪除信息后的數(shù)組重新寫回到文件中3〕創(chuàng)立根本信息的算法實(shí)現(xiàn)先用fopen()以讀方式翻開學(xué)生根本信息文檔,并將返回地址賦值給文件指針型變量fp,假設(shè)翻開文件錯(cuò)誤那么提示文件翻開錯(cuò)誤,用feof()判斷是否為文件結(jié)尾,用fscanf()將文檔中讀出的信息賦值分別賦值給p1[i]中的各項(xiàng)數(shù)據(jù)項(xiàng),用fscanf()!=EOF防止讀入文件中的回車空白行,讀入信息后用isExistNo()判斷該學(xué)號(hào)是否已經(jīng)存在,假設(shè)存在那么不讀入該行信息,假設(shè)不重復(fù)那么用InitQueue()初始化每個(gè)數(shù)組元素的隊(duì)列,讀完所有信息后提示創(chuàng)立成功并用fclosef()關(guān)閉前面翻開的根本信息文件;4〕顯示學(xué)生信息的算法實(shí)現(xiàn) 先通過判斷數(shù)組長度i來判斷學(xué)生信息數(shù)組是否為空,假設(shè)i為0,即數(shù)據(jù)為空,那么提示“信息為空,請(qǐng)先創(chuàng)立根本信息",假設(shè)數(shù)據(jù)不為空,那么利用for循環(huán)對(duì)每個(gè)數(shù)組元素的數(shù)據(jù)信息進(jìn)行輸出,分別輸出p1[j].No,p1[j].name,p1[j].genderp1[j].brithday,p1[j].phoneNo,p1[j].tpartym,p1[j].addr,再在每次循環(huán)中用GetLine(p1[j])對(duì)該學(xué)生的各門課程名及成績進(jìn)行輸出;假設(shè)還未存儲(chǔ)成績那么不對(duì)課程成績進(jìn)行輸出;5〕輸入成績的算法實(shí)現(xiàn)先通過判斷數(shù)組長度i來判斷學(xué)生信息數(shù)組是否為空,假設(shè)i為0,即數(shù)據(jù)為空,那么提示“請(qǐng)先創(chuàng)立根本信息",假設(shè)數(shù)據(jù)不為空,先定義一個(gè)courses類型的中間變量e,并將e的next指針域設(shè)置為空,之后輸入課程代號(hào),將輸入的課程代號(hào)存入eo中,在通過strcmp(_)去與的課程代號(hào)相比擬,找到滿足條件的課程代號(hào)后用fopen()翻開對(duì)應(yīng)的課程文件并將文件地址賦值給fp1,翻開文件后用fscanf()將文件中的數(shù)據(jù)賦值給e.sNo,e.degree,賦值完成后通過e.sNo找到對(duì)應(yīng)的數(shù)組元素,并用isExitcNo()判斷該門課程是否存在于該數(shù)組元素的隊(duì)列中,假設(shè)不存在那么用EnQueue(p1[j],e)將該課程的信息存入數(shù)組元素的隊(duì)列中,假設(shè)已經(jīng)存在該門課程的信息,那么不將該課程信息存入數(shù)組元素的隊(duì)列中,存入所有成績完成后用fclose(fp1)關(guān)閉相應(yīng)的文件;6〕統(tǒng)計(jì)成績的算法實(shí)現(xiàn)先通過判斷數(shù)組長度i來判斷學(xué)生信息數(shù)組是否為空,假設(shè)i為0,即數(shù)據(jù)為空,那么提示“請(qǐng)先創(chuàng)立根本信息",假設(shè)數(shù)據(jù)不為空,那么通過建立一個(gè)for循環(huán),在循環(huán)過程中先判斷成績信息是否為空,假設(shè)成績信息為空那么提示先輸入成績,反之那么用CalculateAve(p1[j])計(jì)算每個(gè)學(xué)生所有課程成績的平均值,并將函數(shù)返回值賦值給p1[j].average;7〕查找學(xué)生信息的算法實(shí)現(xiàn)先通過判斷數(shù)組長度i來判斷學(xué)生信息數(shù)組是否為空,假設(shè)i為0,即數(shù)據(jù)為空,那么提示“請(qǐng)先創(chuàng)立根本信息",假設(shè)數(shù)據(jù)不為空,通過輸入一選擇值來選擇進(jìn)行學(xué)號(hào)搜索或按姓名搜索,假設(shè)該值為1,先輸入一個(gè)學(xué)號(hào)存儲(chǔ)于r中,再通過建立一個(gè)for循環(huán)來對(duì)數(shù)組進(jìn)行遍歷〔設(shè)立一個(gè)flag值用于判斷是否能找到該條學(xué)生信息,flag初值定為0〕,每次循環(huán)將數(shù)組元素中的學(xué)號(hào)與r進(jìn)行比擬,假設(shè)學(xué)號(hào)相等,那么對(duì)該學(xué)生的信息進(jìn)行輸出,并將flag賦值為1,假設(shè)結(jié)束循環(huán)后flag值仍為0,即數(shù)組中無該條學(xué)生的信息,那么提示“查無此人〞假設(shè)選擇值為2那么先輸入一個(gè)姓名存儲(chǔ)于r中,再通過建立一個(gè)for循環(huán)來對(duì)數(shù)組進(jìn)行遍歷〔設(shè)立一個(gè)flag值用于判斷是否能找到該條學(xué)生信息,flag初值定為0〕,每次循環(huán)將數(shù)組元素中的姓名與r進(jìn)行比擬,假設(shè)相等,那么對(duì)該學(xué)生的信息進(jìn)行輸出,并將flag賦值為1,假設(shè)結(jié)束循環(huán)后flag值仍為0,即數(shù)組中無該條學(xué)生的信息,那么提示“查無此人〞8〕排序的算法實(shí)現(xiàn)先通過判斷數(shù)組長度i來判斷學(xué)生信息數(shù)組是否為空,假設(shè)i為0,即數(shù)據(jù)為空,那么提示“請(qǐng)先創(chuàng)立根本信息",假設(shè)數(shù)據(jù)不為空,那么通過輸入一選擇值來選擇進(jìn)行學(xué)號(hào)排序或按平均成績排序,假設(shè)該值為1,那么進(jìn)行按學(xué)號(hào)排序,因此處的學(xué)號(hào)為字符型,故無法直接進(jìn)行大小比擬,因此需用sscanf()將字符型變量轉(zhuǎn)化為int型變量再進(jìn)行大小比擬,此處以插入法排序?qū)?shù)組進(jìn)行排序假設(shè)選擇值為2,那么通過比擬數(shù)組中平均值的大小對(duì)數(shù)組進(jìn)行排序,假設(shè)成績信息為空那么提示先輸入成績,假設(shè)不為空那么以插入法排序?qū)?shù)組進(jìn)行排序;5總結(jié)1.在一周的時(shí)間里,不斷地對(duì)程序及各模塊進(jìn)行修改、編譯、調(diào)試、運(yùn)行,其間遇到很多問題,但通過自己的努力及詢問同學(xué)的幫助都一一解決了。2.程序是寫出來的,不是想出來的。開始階總是在想,總感覺很困難做不了,但是真正投入其中之后才覺察其實(shí)只要用心,只要有克服一切的勇氣和信心就可以把程序做好,錯(cuò)誤總是越改越少的。3.要用愉悅的心情去做,從編程的過程中體會(huì)樂趣,興趣是最好的老師就是這么回事4.要善于利用編程軟件的調(diào)試功能調(diào)試自己的程序,通過程序的調(diào)試我發(fā)現(xiàn)并解決了許多問題5.通過課程設(shè)計(jì),自己通過系統(tǒng)分析、系統(tǒng)設(shè)計(jì)、編程調(diào)試,寫實(shí)驗(yàn)報(bào)告等環(huán)節(jié),進(jìn)一步掌握應(yīng)用系統(tǒng)設(shè)計(jì)的方法和步驟,靈活運(yùn)用并深刻理解典型數(shù)據(jù)結(jié)構(gòu)在軟件開發(fā)中的應(yīng)用。6.通過實(shí)踐,我也發(fā)現(xiàn)我的很多缺乏之處,首先是自己平時(shí)上機(jī)練習(xí)太少,知識(shí)的積壓給編程帶來了一定的麻煩。另外我對(duì)數(shù)據(jù)結(jié)構(gòu)的一些標(biāo)準(zhǔn)庫函數(shù)還不太了解,如開始進(jìn)入系統(tǒng)后發(fā)現(xiàn)操作的界面很亂,如果能夠及時(shí)的清屏那樣就會(huì)變的很明了。查閱了相關(guān)的資料和問同學(xué)后我知道只要在程序中調(diào)用庫函數(shù)system("cls")就可以了,知道了這個(gè)函數(shù)的根本用法;還有對(duì)數(shù)據(jù)結(jié)構(gòu)中經(jīng)常出現(xiàn)的錯(cuò)誤也不了解,通過實(shí)踐,使我單獨(dú)處理錯(cuò)誤的能力也有了很大的提高。 7.編寫程序需要考慮到程序運(yùn)行的各種狀況,這樣才能使程序使用的長久,不易出現(xiàn)bug。附錄MACROBUTTONAcceptAllChangesShown[單擊此處添加程序源代碼]主程序:#include<stdio.h>#include<stdlib.h>#include<iostream>#include<string.h>#defineOK1#defineERROR0typedefintStatus;usingnamespacestd;#include"test1.h"intmain(){ studentp1[100]; FILE*fp; intchoice; inti=0; do{ cout<<"*******************************************************************************"<<endl; cout<<" 1--------------創(chuàng)立"<<endl; cout<<" 2--------------顯示"<<endl; cout<<" 3--------------輸入成績"<<endl; cout<<" 4--------------統(tǒng)計(jì)成績"<<endl; cout<<" 5--------------查找"<<endl; cout<<" 6--------------排序"<<endl; cout<<" 7--------------插入"<<endl; cout<<" 8--------------刪除"<<endl; cout<<" 9--------------退出"<<endl; cout<<"*******************************************************************************"<<endl; cin>>choice; system("CLS"); switch(choice){ case1:{ if(!(fp=fopen("e:\\mys\\basedata.dat","r"))){ cout<<"翻開文件錯(cuò)誤"<<endl; exit(0);} while(!feof(fp)) if((fscanf(fp,"%s%s%s%s%s%s%s",p1[i].No,p1[i].name,p1[i].gender,p1[i].brithday,p1[i].phoneNo,p1[i].tpartym,p1[i].addr))!=EOF){ if(isExistNo(p1,p1[i].No,i)) continue; else{ InitQueue(p1[i]); i++; p1[i].average=0; }} if(i==0) cout<<"文件為空,請(qǐng)檢查文件"<<endl; else cout<<"創(chuàng)立成功"<<endl; fclose(fp); break;} case2: if(i==0) cout<<"信息為空,請(qǐng)錄入信息"<<endl; else for(intj=0;j<i;j++){ cout<<p1[j].No<<""<< p1[j].name<<""<< p1[j].gender<<""<< p1[j].brithday<<""<< p1[j].phoneNo<<""<< p1[j].tpartym<<""<< p1[j].addr<<endl; GetLine(p1[j]); } break; case3: if(i==0) cout<<"請(qǐng)先創(chuàng)立根本信息"<<endl; else{ charc[10]; FILE*fp1; coursese; e.next=0; //studentQ; //InitQueue(Q); cout<<"請(qǐng)輸入課程代號(hào),假設(shè)要返回上層請(qǐng)輸入0"<<endl; do{ //cout<<"請(qǐng)輸入課程代號(hào),假設(shè)要返回上層請(qǐng)輸入0"<<endl; cin>>c; if(strcmp(c,"c01")!=0&&strcmp(c,"c02")!=0&&strcmp(c,"c03")!=0&&strcmp(c,"c04")!=0&&strcmp(c,"0")!=0){ cout<<"課程代號(hào)出錯(cuò),請(qǐng)重新輸入"<<endl; continue; } if(strcmp(c,"c01")==0){ strcpy(eo,"c01"); strcpy(eame,"原理根底"); if(!(fp1=fopen("e:\\mys\\c01.txt","r"))){ cout<<"翻開文件錯(cuò)誤"<<endl; exit(0); } else{ while(!feof(fp1)) if((fscanf(fp1,"%s%d",e.sNo,&e.degree))!=EOF){ for(intj=0;j<i;j++) if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],eo)==0)) EnQueue(p1[j],e); } } fclose(fp1); } elseif(strcmp(c,"c02")==0){ strcpy(eo,"c02"); strcpy(eame,"數(shù)據(jù)結(jié)構(gòu)"); if(!(fp1=fopen("e:\\mys\\c02.txt","r"))){ cout<<"翻開文件錯(cuò)誤"<<endl; exit(0);} else{ while(!feof(fp1)) if((fscanf(fp1,"%s%d",e.sNo,&e.degree))!=EOF){ for(intj=0;j<i;j++) if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],eo)==0)) EnQueue(p1[j],e); } } fclose(fp1); } elseif(strcmp(c,"c03")==0){ strcpy(eo,"c03"); strcpy(eame,"數(shù)學(xué)建模"); if(!(fp1=fopen("e:\\mys\\c03.txt","r"))){ cout<<"翻開文件錯(cuò)誤"<<endl; exit(0);} else{ while(!feof(fp1)) if((fscanf(fp1,"%s%d",e.sNo,&e.degree))!=EOF){ for(intj=0;j<i;j++) if((strcmp(e.sNo,p1[j].No)==0)&&(isExitcNo(p1[j],eo)==0)) EnQueue(p1[j],e); } } fclose(fp1); } elseif(strcmp(c,"c04")==0){ strcpy(eo,"c04"); strcpy(eame,"微觀經(jīng)濟(jì)"); if(!(fp1=fopen("e:\\mys\\c04.txt","r"))){ cout<<"翻開文件錯(cuò)誤"<<endl; exit(0);} else{ while(!feof(fp1)) if((fscanf(fp1,"%s%d",e.sNo,&e.degree))!=EOF){ for(intj=0;j<i;j++) if((strcmp(e.sNo,p1[j].No))==0&&(isExitcNo(p1[j],eo)==0)) EnQueue(p1[j],e); } } fclose(fp1); } //else // cout<<"請(qǐng)輸入正確的課程代號(hào)"<<endl; }while((strcmp(c,"0"))!=0);} break; case4: if(i==0) cout<<"信息為空,請(qǐng)先創(chuàng)立根本信息"<<endl; else{ for(intj=0;j<i;j++){ cout<<p1[j].No<<""<< p1[j].name<<""; if(!(p1[j].front->next)) cout<<"成績?yōu)榭?,?qǐng)先輸入成績"<<endl; else{ CalculateAve(p1[j]); cout<<p1[j].average;} cout<<endl; } } break; case5: if(i==0) cout<<"信息為空,請(qǐng)先創(chuàng)立信息"<<endl; else{ inta; do{ system("CLS"); cout<<"****************************************"<<endl; cout<<"1----------按學(xué)號(hào)查詢"<<endl; cout<<"2----------按姓名查詢"<<endl; cout<<"0----------返回上層"<<endl; cout<<"****************************************"<<endl; cin>>a; system("CLS"); charr[10]; if(a==1)do{ strcpy(r,"1"); intflag=0; cout<<"請(qǐng)輸入學(xué)號(hào),返回上層請(qǐng)按0"<<endl; cin>>r; for(intj=0;j<i;j++) if(strcmp(p1[j].No,r)==0){ cout<<p1[j].No<<""<< p1[j].name<<""<< p1[j].gender<<""<< p1[j].brithday<<""<< p1[j].phoneNo<<""<< p1[j].tpartym<<""<< p1[j].addr<<endl; GetLine(p1[j]); flag=1;} if(!flag) cout<<"查無此人,請(qǐng)重新輸入"<<endl; }while(strcmp(r,"0")!=0); elseif(a==2) do{ strcpy(r,"1"); intflag=0; cout<<"請(qǐng)輸入姓名,返回上層請(qǐng)按0"<<endl; cin>>r; for(intj=0;j<i;j++) if(strcmp(p1[j].name,r)==0){ cout<<p1[j].No<<""<< p1[j].name<<""<< p1[j].gender<<""<< p1[j].brithday<<""<< p1[j].phoneNo<<""<< p1[j].tpartym<<""<< p1[j].addr<<endl; GetLine(p1[j]); flag=1;} if(!flag) cout<<"查無此人,請(qǐng)重新輸入"<<endl; }while(strcmp(r,"0")!=0); elseif(a==0) break; else{ cout<<"請(qǐng)重新選擇"<<endl; system("pause");} }while(1);} break; case6: if(i==0) cout<<"信息為空,請(qǐng)先創(chuàng)立根本信息"<<endl; else{ intr; do{ cout<<"****************************************"<<endl; cout<<"1----------按學(xué)號(hào)排序"<<endl; cout<<"2----------按平均成績排序"<<endl; cout<<"0----------返回上層"<<endl; cout<<"****************************************"<<endl; cin>>r; if(r==1){ for(intk=1;k<i;k++) { inta,b; sscanf(p1[k].No,"%d",&a); studenttemp=p1[k];//temp標(biāo)記為未排序第一個(gè)元素 intj=k; sscanf(p1[j-1].No,"%d",&b); while(j>=0&&b>a) { p1[j]=p1[j-1]; j--; sscanf(p1[j-1].No,"%d",&b); } p1[j]=temp; } for(intj=0;j<i;j++) { cout<<p1[j].No<<""<< p1[j].name<<endl; /*p1[j].gender<<""<< p1[j].brithday<<""<< p1[j].phoneNo<<""<< p1[j].tpartym<<""<< p1[j].addr<<endl; GetLine(p1[j]);*/ } } elseif(r==2){ for(intk=1;k<i;k++) { inta; a=p1[k].average; studenttemp=p1[k];//temp標(biāo)記為未排序第一個(gè)元素 intj; for(j=k;j>0&&p1[j-1].average>temp.average;j--) { p1[j]=p1[j-1]; } p1[j]=temp; } for(intj=0;j<i;j++) { cout<<p1[j].No<<""<< p1[j].name<<""; if(!(p1[j].front->next)) cout<<"成績信息為空,請(qǐng)輸入該學(xué)生成績"; else{ if(p1[j].average==0) cout<<"請(qǐng)先計(jì)算平均成績"; else cout<<p1[j].average;} cout<<endl; } } elseif(r==0) break; else{ cout<<"請(qǐng)重新選擇"<<endl; system("pause");} }while(1);} break; case7:{ inta=-1; do{ cout<<"請(qǐng)輸入學(xué)號(hào)"<<endl; while(1){ cin>>p1[i].No; if(isNo(p1[i].No)) break; else cout<<"格式錯(cuò)誤,請(qǐng)重新輸入"<<endl; } if(isExistNo(p1,p1[i].No,i)){ cout<<"該學(xué)號(hào)已存在"<<endl; continue;} cout<<"請(qǐng)輸入姓名"<<endl; cin>>p1[i].name; cout<<"請(qǐng)輸入性別"<<endl; while(1){ cin>>p1[i].gender; if(isGender(p1[i].gender)==1) break; else cout<<"格式錯(cuò)誤,請(qǐng)重新輸入"<<endl; } cout<<"請(qǐng)輸入出生年月"<<endl; while(1){ cin>>p1[i].brithday; if(isNo(p1[i].brithday)) break; else cout<<"格式錯(cuò)誤,請(qǐng)重新輸入"<<endl; } cout<<"是否為黨員"<<endl; while(1){ cin>>p1[i].tpartym; if(isYN(p1[i].tpartym)) break; else cout<<"格式錯(cuò)誤,請(qǐng)重新輸入"<<endl; } cout<<"請(qǐng)輸入號(hào)碼"<<endl; while(1){ cin>>p1[i].phoneNo; if(isNo(p1[i].phoneNo)) break; else cout<<"格式錯(cuò)誤,請(qǐng)重新輸入"<<endl; } cout<<"請(qǐng)輸入地址"<<endl; cin>>p1[i].addr; InitQueue(p1[i]); p1[i].average=0; //if(!(fp=fopen("e:\\mys\\basedata.dat","a"))) //cout<<"翻開文件錯(cuò)誤"<<endl; coursese; e.next=0; while(1){ cout<<"請(qǐng)輸入課程代號(hào),輸0結(jié)束"<<endl; cin>>eo; //if(isExitcNo(p1[i],eo)) // cout<<"該課程已存在,請(qǐng)勿重新輸入"<<endl; //else{ if(strcmp(eo,"c01")==0) strcpy(eame,"原理根底"); elseif(strcmp(eo,"c02")==0) strcpy(eame,"數(shù)據(jù)結(jié)構(gòu)"); elseif(strcmp(eo,"c03")==0) strcpy(eame,"數(shù)學(xué)建模"); elseif(strcmp(eo,"c04")==0) strcpy(eame,"微觀經(jīng)濟(jì)"); elseif(strcmp(eo,"0")==0) break; else{ cout<<"課程代號(hào)出錯(cuò),請(qǐng)重新輸入"<<endl; continue; } cout<<"請(qǐng)輸入該課程成績"<<endl; cin>>e.degree; if(exiscNoreassign(p1[i],eo,e.degree)==0) EnQueue(p1[i],e); //} } InsertFile(p1[i]); cout<<"1.繼續(xù)添加"<<endl; cout<<"0.返回"<<endl; cin>>a; i++; }while(a!=0);} break; case8:{ inta=-1; do{ intflag=0; if(i==0){ cout<<"信息為空,請(qǐng)先創(chuàng)立根本信息"<<endl; a=0; } else{ charc[10]; studenttemp; cout<<"請(qǐng)輸入要?jiǎng)h除的學(xué)號(hào)"<<endl; cin>>c; for(intj=0;j<i;j++) { if(strcmp(p1[j].No,c)==0) { i--; for(intk=j;k<i;k++) p1[k]=p1[k+1]; flag=1; break; } } if(flag==0) cout<<"該學(xué)號(hào)不存在或已被刪除"<<endl; else reWFile(p1,i); cout<<"1.繼續(xù)刪除"<<endl; cout<<"0.返回上層"<<endl; cin>>a; } }while(a!=0);} break; case9:break; defalult: cout<<"請(qǐng)輸入1-9的數(shù)字:"<<endl; system("pause"); break; } system("pause"); system("CLS"); }while(choice!=9); return0;}頭文件:typedefstructcourses{ charcNo[15]; charcname[20]; charsNo[10]; intdegree; courses*next;}courses;typedefstructstudent{ charNo[10]; charname[10]; chargender[5]; charbrithday[8]; chartpartym[5]; charphoneNo[15]; charaddr[20]; //coursesa; courses*front; courses*rear; intaverage;}student;/*typedefstruct{ courses*front; courses*rear;}LinkQueue;*/StatusInitQueue(student&Q){ Q.front=Q.rear=newcourses; Q.front->next=0; returnOK;}StatusEnQueue(student&Q,coursese){ courses*r; r=newcourses; strcpy(r->cNo,eo); strcpy(r->cname,eame); r->degree=e.degree; r->next=0; Q.rear->next=r; Q.rear=r; returnOK;}StatusDeQueue(student&Q,courses&e){ courses*r; if(Q.front==Q.rear)returnERROR; r=Q.front->next; strcpy(e.sNo,r->sNo); e.degree=r->degree; Q.front->next=r->next; if(Q.rear=r) Q.rear=Q.front; deleter; returnOK;}StatusGetLine(studentQ){ courses*r; if(Q.front==Q.rear) cout<<"課程信息為空,請(qǐng)先輸入課程信息"; else{ r=Q.front->next; while(r){ //strcpy(eo,Q.front->next->cNo); //e.degree=Q.front->next->degree; cout<<r->cname<<""<<r->degree<<""; r=r->next;}} cout<<endl; cout<<endl; returnOK;}StatusCalculateAve(student&Q){ intn=0; courses*r; if(Q.front==Q.rear)returnERROR; r=Q.front->next; Q.average=0; while(r){ Q.average+=r->degree; r=r->next; n++; } Q.average/=n; returnOK;}intisExitcNo(studentQ,char*cNo){ intflag=0; courses*r; if(Q.front==Q.rear)returnERROR; r=Q.front->next; while(r){ if(strcmp(r->cNo,cNo)==0){ flag=1; break; } r=r->next;} returnflag;}intisExistNo(student*p1,char*No,inti=0){ intj=0,flag=0; for(j=0;j<i;j++) if(strcmp(p1[j].No,No)==0) { flag=1; break; } returnflag;}intexiscNoreassign(student&Q,char*cNo,intdegree){ intflag=0; courses*r; if(Q.front==Q.rear)returnERROR; r=Q.front->next; while(r){ if(strcmp(r->cNo,cNo)==0){ r->degree=degree; flag=1; break; } r=r->next;} returnflag;}intisNo(char*No){ intj,flag=1; for(j=0;No[j]!='\0';j++){ if(No[j]<'0'||No[j]>'9'){ flag=0; break; } } returnflag;}intisGender(char*gender){ intflag=0; if((strcmp(gender,"男")==0)||(strcmp(gender,"女")==0)) flag=1; returnflag;}intisYN(char*YN){ intflag=0; if((strcmp(YN,"是")==0)||(strcmp(YN,"否")==0)) flag=1; returnflag;}StatusInsertFile(studentQ){ FILE*fp1; if(!(fp1=fopen("e:\\mys\\basedata.dat","a"))) cout<<"翻開文件錯(cuò)誤"<<endl; fprintf(fp1,"%s%s%s%s%s%s
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 義齒注冊(cè)檢驗(yàn)合同范例
- 出租房交物業(yè)費(fèi)合同范例
- 砂礫排水墊層施工方案
- 人工安全合同范例
- 出售養(yǎng)殖棚合同范例
- 仿真綠植布置合同范例
- 考慮水平隔板的單箱雙室波形鋼腹板組合箱梁的剪力滯效應(yīng)研究
- 信訪信息咨詢合同范例
- PEDOT-PSS基二元、三元熱電復(fù)合材料的制備與性能測試
- 基于粒子群算法的低碳冷鏈物流配送路徑優(yōu)化
- (二模)2025年寶雞市高考模擬檢測試題(二)物理試卷(含答案)
- 基地種植合作合同范本
- 露天煤礦安全生產(chǎn)技術(shù)露天煤礦安全管理培訓(xùn)
- 【2025年衛(wèi)生健康宣傳日】世界防治結(jié)核病日
- 新版《醫(yī)療器械經(jīng)營質(zhì)量管理規(guī)范》(2024)培訓(xùn)試題及答案
- 2025年人教版數(shù)學(xué)五年級(jí)下冊(cè)教學(xué)計(jì)劃(含進(jìn)度表)
- 《神奇糖果店》教學(xué)課件
- 部編人教版二年級(jí)道德與法治下冊(cè)同步練習(xí)(全冊(cè))
- h型鋼力學(xué)性能計(jì)算表
- 接觸網(wǎng)專業(yè)施工安全質(zhì)量重點(diǎn)及卡控表
- 音樂室使用記錄表
評(píng)論
0/150
提交評(píng)論