超详细的《防疫健康管理软件》开发报告奉上!【文末获取完整源码】
《學(xué)生防疫信息管理軟件》是基于C#語(yǔ)言開(kāi)發(fā)的一款為監(jiān)控和管理學(xué)生疫情信息而開(kāi)發(fā)的應(yīng)用型軟件,開(kāi)發(fā)環(huán)境為Visual Studio 2019 版,使用C#Winform窗體進(jìn)行開(kāi)發(fā)。是集成前端交互界面、后端數(shù)據(jù)處理和信息文件存儲(chǔ)為一體的軟件項(xiàng)目。
目錄
軟件簡(jiǎn)介
1、開(kāi)發(fā)背景
2、總體設(shè)計(jì)
2.1、設(shè)計(jì)思路
2.2、系統(tǒng)流程圖
2.3、軟件界面設(shè)計(jì)
3、詳細(xì)設(shè)計(jì)
3.1、學(xué)生信息錄入模塊
3.2、學(xué)生信息查詢(xún)模塊
3.3、學(xué)生每日體溫錄入模塊
3.4、學(xué)生信息修改模塊
3.5、學(xué)生信息刪除模塊
3.6、顯示所有學(xué)生信息模塊
3.7、顯示異常信息模塊
3.8、數(shù)據(jù)更新模塊
4、軟件開(kāi)發(fā)總結(jié)
Hello!大家好,我是灰小猿!
最近在做一個(gè)C#的課設(shè)開(kāi)發(fā),是一款用于學(xué)生健康防疫信息監(jiān)控的軟件,在這里和大家分享記錄一下軟件的結(jié)構(gòu)和開(kāi)發(fā)思路。
?
軟件簡(jiǎn)介
《學(xué)生防疫信息管理軟件》是基于C#語(yǔ)言開(kāi)發(fā)的一款為監(jiān)控和管理學(xué)生疫情信息而開(kāi)發(fā)的應(yīng)用型軟件,開(kāi)發(fā)環(huán)境為Visual Studio 2019 版,使用C#Winform窗體進(jìn)行開(kāi)發(fā)。集成前端交互界面、后端數(shù)據(jù)處理和信息文件存儲(chǔ)為一體,在前端界面的設(shè)計(jì)上主要用到的技術(shù)有winform窗體的構(gòu)建、panel容器的合理使用、子窗體切換效果的實(shí)現(xiàn)、單選框的實(shí)現(xiàn)及獨(dú)立頁(yè)面間的數(shù)據(jù)通信等;后端數(shù)據(jù)處理上主要用到的技術(shù)是:結(jié)構(gòu)體、數(shù)組列表、全局變量、類(lèi)的繼承、構(gòu)造函數(shù)、IO流文件存儲(chǔ)、窗體的Controls函數(shù)等。前后端通過(guò)交互從而實(shí)現(xiàn)模塊間的相互通信。同時(shí)力求降低模塊耦合性、提高軟件的可維護(hù)性。
關(guān)鍵字:Winform窗體 ?結(jié)構(gòu)體 ?模塊化設(shè)計(jì)
?
1、開(kāi)發(fā)背景
隨著2020年新冠疫情的全球爆發(fā)和不斷蔓延,人們的社會(huì)生活受到嚴(yán)重的危害和損失,中國(guó)人民團(tuán)結(jié)一心、頑強(qiáng)抗疫,在春暖花開(kāi)之際終將疫情控制,盡最大的努力抑制了疫情的進(jìn)一步蔓延,在最短的時(shí)間內(nèi)有序的復(fù)工復(fù)產(chǎn),但與此同時(shí),中國(guó)人民的抗疫并沒(méi)有就此結(jié)束,全國(guó)各地的外來(lái)輸入病例仍有增長(zhǎng)的噱頭,我們?cè)谏畹拿恳粋€(gè)角落依然與疫情斗爭(zhēng)著,因此對(duì)每一個(gè)的身體和發(fā)熱情況進(jìn)行實(shí)時(shí)監(jiān)控是十分必然的舉措。尤其對(duì)于高校來(lái)說(shuō),來(lái)自全國(guó)各地的學(xué)子返校,做好高校的疫情防控是廣大高校確保學(xué)生生活安全的必要措施。
《學(xué)生防疫信息管理軟件》針對(duì)廣大搞笑的每一個(gè)學(xué)生,進(jìn)行返校信息采集入庫(kù),甄別學(xué)生信息、確認(rèn)學(xué)生是否存在發(fā)熱和疫區(qū)風(fēng)險(xiǎn),同時(shí)對(duì)學(xué)生每日體溫實(shí)時(shí)記錄,發(fā)現(xiàn)超標(biāo)體溫,系統(tǒng)及時(shí)提醒并將信息單獨(dú)列出反饋。做到確保每一位學(xué)生的身體健康。有效提升校園防控力量。
?
2、總體設(shè)計(jì)
2.1、設(shè)計(jì)思路
《學(xué)生防疫信息管理軟件》的設(shè)計(jì)通過(guò)前端交互頁(yè)面錄入信息,后端通過(guò)結(jié)構(gòu)體和數(shù)組列表對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ),同時(shí)在前端有學(xué)生信息錄入、學(xué)生信息查詢(xún)、每日體溫錄入、學(xué)生信息修改、學(xué)生信息刪除、顯示所有信息和顯示健康狀態(tài)異常信息等模塊,通過(guò)用戶(hù)對(duì)相應(yīng)模塊的選擇,在軟件后端對(duì)數(shù)據(jù)盡心相應(yīng)的處理,由于各個(gè)窗體之間是無(wú)法直接進(jìn)行數(shù)據(jù)傳輸?shù)?#xff0c;這時(shí)我們需要建立相應(yīng)的函數(shù),對(duì)窗口類(lèi)進(jìn)行實(shí)例化,通過(guò)調(diào)用相應(yīng)的函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理和在界面實(shí)時(shí)輸出。由于數(shù)據(jù)有序的存儲(chǔ)在數(shù)組列表中,因此所有的模塊化操作歸根結(jié)底都是對(duì)數(shù)組列表內(nèi)部相應(yīng)的數(shù)據(jù)的處理。
?
2.2、系統(tǒng)流程圖
?
2.3、軟件界面設(shè)計(jì)
軟件界面采用板塊分離的設(shè)計(jì)思路,界面分為上下左右四部分,上部為“學(xué)生防疫信息管理軟件”標(biāo)題控件;左部分為panel1容器,內(nèi)部存放各功能按鈕,右部分為panel2容器,用來(lái)存放和顯示各模塊的小窗體,下部分為panel3容器,內(nèi)部顯示當(dāng)前已錄入學(xué)生人數(shù)和異常學(xué)生人數(shù),并且可以實(shí)時(shí)的通過(guò)數(shù)據(jù)更新按鈕對(duì)數(shù)據(jù)進(jìn)行實(shí)時(shí)的更新。
?
3、詳細(xì)設(shè)計(jì)
3.1、學(xué)生信息錄入模塊
學(xué)生信息錄入窗體(formMainInput)通過(guò)子窗體在主窗體中顯示,用戶(hù)可以通過(guò)該窗體錄入學(xué)號(hào)、姓名、專(zhuān)業(yè)、班級(jí)、何地返校、何時(shí)返校、是否發(fā)熱、是否去過(guò)疫區(qū)等信息,在formMainInput的類(lèi)中調(diào)用formMain類(lèi)中的信息錄入函數(shù),將數(shù)據(jù)傳入主類(lèi)并且在主類(lèi)中定義結(jié)構(gòu)體,對(duì)相應(yīng)的屬性在結(jié)構(gòu)體中定義,并且將數(shù)據(jù)通過(guò)結(jié)構(gòu)體在數(shù)組列表中進(jìn)行存儲(chǔ)。同時(shí)系統(tǒng)后臺(tái)還會(huì)對(duì)用戶(hù)輸入的學(xué)號(hào)進(jìn)行分析,分析是否出現(xiàn)學(xué)號(hào)重復(fù)的現(xiàn)象,如果學(xué)號(hào)重復(fù),則進(jìn)行彈窗提醒并且不對(duì)信息給予記錄。
//定義一個(gè)方法讓學(xué)生信息通過(guò)窗口錄入模塊public void inputStudentInfo(string num,string name, string major, string classa,string site, string time,string fever,string epidemic){Boolean different_info = true; //設(shè)定布爾值,默認(rèn)錄入的信息不沖突foreach (Student sa in studentList){ //如果錄入的學(xué)號(hào)已經(jīng)存在,則different_info為falseif (sa.num == num){different_info = false;MessageBox.Show("該生信息已錄入!\n請(qǐng)重新錄入!");}}if (different_info){Student s = new Student();s.num = num;s.name = name;s.major = major;s.classa = classa;s.site = site;s.time = time;s.fever = fever;s.epidemic = epidemic;studentList.Add(s); //將錄入的信息加入到數(shù)據(jù)列表//打開(kāi)文件對(duì)其進(jìn)行寫(xiě)入FileStream fs = new FileStream(path, FileMode.Append);//設(shè)定寫(xiě)入的字符流StreamWriter sw = new StreamWriter(fs, Encoding.Default);sw.WriteLine(s.num + "\t" + s.name + "\t" + s.major + "\t" + s.classa + "\t" + s.site + "\t" + s.time + "\t" + s.fever + "\t" + s.epidemic);sw.Close();fs.Close();MessageBox.Show("添加成功!", "提示");}}?
3.2、學(xué)生信息查詢(xún)模塊
學(xué)生信息查詢(xún)模塊(formMainInqir)基于學(xué)生學(xué)號(hào)進(jìn)行查詢(xún),在前端學(xué)生將學(xué)號(hào)輸入并確認(rèn)查詢(xún)后,后臺(tái)會(huì)根據(jù)用戶(hù)輸入的學(xué)號(hào)遍歷存儲(chǔ)信息的數(shù)組列表,如果查詢(xún)到則會(huì)在以上的界面中顯示學(xué)生的信息,并且由于僅僅是查詢(xún)而并非是修改信息,所以信息的顯示是不可編輯的狀態(tài),如果遍歷數(shù)組列表后發(fā)現(xiàn)信息并沒(méi)有相同的學(xué)號(hào),系統(tǒng)則會(huì)發(fā)出提示,提示用戶(hù)輸入的學(xué)號(hào)不存在。
//學(xué)生信息查詢(xún)模塊public void inquireStudentInfo(string num){Boolean exist_info = false; //設(shè)定布爾值,默認(rèn)該生信息不存在foreach (Student sa in studentList){//如果查詢(xún)的學(xué)號(hào)已經(jīng)存在,if (sa.num == num){exist_info = true;//顯示該生信息FormInfo formInfo = new FormInfo(sa.num,sa.name,sa.major,sa.classa,sa.site,sa.time,sa.fever,sa.epidemic,sa.everheat); //為顯示學(xué)生信息的窗體實(shí)例化formInfo.ShowDialog(); //顯示窗體}}if (!exist_info){MessageBox.Show("該生信息不存在!", "警告");}}?
3.3、學(xué)生每日體溫錄入模塊
學(xué)生每日體溫錄入模塊(formMainEver)基于學(xué)生學(xué)號(hào)對(duì)學(xué)生信息進(jìn)行查詢(xún),若在屬數(shù)組列表中查詢(xún)到相匹配的學(xué)生信息則會(huì)調(diào)取該學(xué)生信息,并且將獲取到用戶(hù)輸入的今日體溫,記錄在數(shù)組列表中,同時(shí)系統(tǒng)還會(huì)自動(dòng)對(duì)用戶(hù)輸入的今日體溫進(jìn)行判斷,如果錄入的體溫高于37.3度則會(huì)將該學(xué)生的信息列為異常發(fā)熱信息,之后便會(huì)將該學(xué)生信息突出顯示。如果未查詢(xún)到該學(xué)生學(xué)號(hào)信息則會(huì)提醒用戶(hù)學(xué)號(hào)輸入有誤!
//每日體溫錄入模塊public void everHeat(string num, string everheat){Boolean exist_info = false; //設(shè)定布爾值,默認(rèn)該生信息不存在for(int i = 0;i<studentList.Count;i++){Student sa = (Student) studentList[i];//如果查詢(xún)的學(xué)號(hào)已經(jīng)存在,if (sa.num == num){exist_info = true;//將今日體溫錄入//新建一個(gè)Student類(lèi)型對(duì)象,接收該學(xué)生信息Student s = new Student();s.num = sa.num;s.name = sa.name;s.major = sa.major;s.classa = sa.classa;s.site = sa.site;s.time = sa.time;s.fever = sa.fever;s.epidemic = sa.epidemic;s.everheat = everheat;//如果該生體溫大于37.3度,則屬于發(fā)熱人群if (Convert.ToDouble(s.everheat) > 37.3){s.fever = "是";}studentList.Remove(studentList[i]); //將之前的信息刪除studentList.Add(s); //將新錄入的信息加入列表MessageBox.Show("今日體溫錄入成功!","提示");break;}}if (!exist_info){MessageBox.Show("該生信息不存在,\n無(wú)法錄入!", "警告");}}?
3.4、學(xué)生信息修改模塊
學(xué)生信息修改模塊(formMainAmend)同樣是基于學(xué)生輸入的學(xué)生學(xué)號(hào)對(duì)存儲(chǔ)的學(xué)生信息進(jìn)行查詢(xún),如果出現(xiàn)了與之相匹配的學(xué)號(hào)信息,則會(huì)將該學(xué)生信息在新窗口中進(jìn)行顯示,此時(shí)該學(xué)生的信息是可編輯的狀態(tài),用戶(hù)可以根據(jù)之前錄入的信息對(duì)學(xué)生的信息進(jìn)行修改,同時(shí)在系統(tǒng)后臺(tái)也會(huì)對(duì)用戶(hù)修改的信息進(jìn)行及時(shí)的更新,并且對(duì)新錄入的信息重新打進(jìn)行判斷,判斷信息是否是屬于異常信息或則發(fā)熱人群,倘若沒(méi)有查詢(xún)到該學(xué)號(hào)的信息,則會(huì)對(duì)用戶(hù)進(jìn)行相應(yīng)的提示。
//修改學(xué)生信息模塊public void amendInfo(string num){Boolean exist_info = false; //設(shè)定布爾值,默認(rèn)該生信息不存在for (int i = 0; i < studentList.Count; i++){Student sa = (Student)studentList[i]; //將列表值強(qiáng)制轉(zhuǎn)換成Student型//如果修改的學(xué)號(hào)已經(jīng)存在,if (sa.num == num){exist_info = true;FormAmend formAmend = new FormAmend(sa.num, sa.name,sa.major,sa.classa,sa.site,sa.time,sa.fever,sa.epidemic,sa.everheat);studentList.Remove(studentList[i]); //將信息刪除formAmend.ShowDialog();}}if (!exist_info){MessageBox.Show("該生信息不存在!", "警告");}}//將新修改的信息寫(xiě)入public void amendStudentInfo(string num, string name, string major, string classa, string site, string time, string fever, string epidemic, string everHear){Student s = new Student();s.num = num;s.name = name;s.major = major;s.classa = classa;s.site = site;s.time = time;s.fever = fever;s.epidemic = epidemic;s.everheat = everHear;//為放置體溫未錄入,在這里設(shè)置異常拋出try{//如果該生體溫大于37.3度,則屬于發(fā)熱人群if (Convert.ToDouble(s.everheat) > 37.3){s.fever = "是";}}catch{}studentList.Add(s); //將錄入的信息加入到數(shù)據(jù)列表//打開(kāi)文件對(duì)其進(jìn)行寫(xiě)入FileStream fs = new FileStream(path, FileMode.Append);//設(shè)定寫(xiě)入的字符流StreamWriter sw = new StreamWriter(fs, Encoding.Default);sw.WriteLine(s.num + "\t" + s.name + "\t" + s.major + "\t" + s.classa + "\t" + s.site + "\t" + s.time + "\t" + s.fever + "\t" + s.epidemic);sw.Close();fs.Close();MessageBox.Show("修改成功!", "提示");}?
3.5、學(xué)生信息刪除模塊
學(xué)生信息刪除模塊(formMainRemove)基于學(xué)生學(xué)號(hào)對(duì)學(xué)生信息進(jìn)行查詢(xún),如果查詢(xún)到該學(xué)生的信息,則會(huì)對(duì)用戶(hù)進(jìn)行二次的確認(rèn),確認(rèn)用戶(hù)是否真的刪除該信息,如果用戶(hù)選擇確認(rèn)刪除,則會(huì)將該學(xué)生信息從存儲(chǔ)學(xué)生信息的數(shù)組列表中進(jìn)行刪除,如果用戶(hù)選擇取消,則刪除操作則會(huì)終止。并且如果學(xué)生學(xué)號(hào)未在系統(tǒng)中查詢(xún)到,則會(huì)提醒用戶(hù)輸入的學(xué)號(hào)信息有誤。
//刪除學(xué)生信息模塊public void removeInfo(string num){Boolean exist_info = false; //設(shè)定布爾值,默認(rèn)該生信息不存在for (int i = 0; i < studentList.Count; i++){Student sa = (Student)studentList[i]; //將列表值強(qiáng)制轉(zhuǎn)換成Student型//如果刪除的學(xué)號(hào)已經(jīng)存在,if (sa.num == num){exist_info = true;DialogResult result = MessageBox.Show("您確定要?jiǎng)h除嗎?", "刪除提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Exclamation);if (result == DialogResult.OK){studentList.Remove(studentList[i]); //將信息刪除MessageBox.Show("刪除成功!", "提示");}}}if (!exist_info){MessageBox.Show("該生信息不存在,\n無(wú)法刪除!", "警告");}}?
3.6、顯示所有學(xué)生信息模塊
顯示所有學(xué)生信息模塊(formMainAllInfo)會(huì)在用戶(hù)發(fā)出顯示請(qǐng)求后,遍歷整個(gè)存儲(chǔ)信息的數(shù)組列表,并且將每一個(gè)學(xué)生的信息按照輸入和修改的順序依次輸出,
private void allInfoBt_Click(object sender, EventArgs e){f6.clearText(); //清除上次文本框緩存//對(duì)列表進(jìn)行遍歷,將每一個(gè)學(xué)生信息寫(xiě)入窗體foreach (Student sa in studentList){f6.setAllInfo(sa.num,sa.name,sa.major,sa.fever,sa.everheat);}f6.Show();groupBox1.Controls.Clear();groupBox1.Controls.Add(f6);}//定義方法,將每條信息寫(xiě)入文本框public void setAllInfo(string num, string name, string major, string fever, string everheat){string studentInfo = " " + num + " " + name + " " + major + " " + fever + " " + everheat + "\r\n";setAllInfo_text.Text += studentInfo;}?
3.7、顯示異常信息模塊
顯示異常信息模塊(formMainUnus)會(huì)在用戶(hù)發(fā)出查看請(qǐng)求后,遍歷整個(gè)存放學(xué)生信息的數(shù)組列表,并且會(huì)對(duì)所有的信息進(jìn)行刪選,根據(jù)學(xué)生是否屬于發(fā)熱人群進(jìn)行區(qū)分,如果學(xué)生屬于發(fā)熱人群則會(huì)將信息輸出在窗口,同時(shí)顯示學(xué)生當(dāng)前的今日體溫,否則不會(huì)輸出信息。
private void unUsualBt_Click(object sender, EventArgs e){f7.clearText(); //清除上次文本框緩存//對(duì)列表進(jìn)行遍歷,將每一個(gè)學(xué)生信息寫(xiě)入窗體foreach (Student sa in studentList){//如果身體異常,則將信息寫(xiě)入窗口if (sa.fever == "是"){f7.setUnusualInfo(sa.num, sa.name, sa.major, sa.fever, sa.everheat);}}f7.Show();groupBox1.Controls.Clear();groupBox1.Controls.Add(f7);}public void setUnusualInfo(string num, string name, string major, string fever, string everheat){string studentInfo = " " + num + " " + name + " " + major + " " + fever + " " + everheat + "\r\n";setUnusual_text.Text += studentInfo;}?
3.8、數(shù)據(jù)更新模塊
數(shù)據(jù)更新模塊(update_button)基于已經(jīng)錄入的學(xué)生信息進(jìn)行區(qū)分,定義異常學(xué)生人數(shù)變量,然后對(duì)整個(gè)數(shù)組列表進(jìn)行遍歷,如果屬于發(fā)熱異常體質(zhì),則會(huì)將異常學(xué)生人數(shù)變量加一,直至將整個(gè)列表遍歷完畢,然后將得出的已錄入的所有學(xué)生人數(shù)和異常學(xué)生人數(shù)進(jìn)行輸入。
//更新數(shù)據(jù)按鈕private void update_button_Click(object sender, EventArgs e){studentCount.Text = studentList.Count.ToString();int fevercount = 0; //記錄發(fā)熱人數(shù)foreach (Student sa in studentList){//如果該生屬于發(fā)熱人群,則feverCount加一if (sa.fever == "是" ){fevercount++;}}unUsualCount.Text = fevercount.ToString();}?
4、軟件開(kāi)發(fā)總結(jié)
《學(xué)生防疫信息管理軟件》的開(kāi)發(fā)從總體上來(lái)說(shuō)是對(duì)C#winform應(yīng)用的一個(gè)很好體現(xiàn),同時(shí)它也屬于實(shí)際應(yīng)用型軟件的一類(lèi),嚴(yán)格按照軟件開(kāi)發(fā)的思想,采用前后端分離、模塊化設(shè)計(jì)等,在為了合理開(kāi)發(fā)軟件的同時(shí),盡可能的提高程序的效率,減少代碼量和提高模塊內(nèi)部數(shù)據(jù)的內(nèi)聚性,降低模塊耦合性;這樣開(kāi)發(fā)的目的也是為了在后期對(duì)軟件進(jìn)行維護(hù)的時(shí)候,可以降低軟件維護(hù)的復(fù)雜性,同時(shí)在軟件使用的過(guò)程中對(duì)于出現(xiàn)的錯(cuò)誤和異常可以及時(shí)的修復(fù),無(wú)需修改大量的代碼。
在軟件的交互界面上,為了提升用戶(hù)使用的體驗(yàn)感,在軟件開(kāi)發(fā)完成后對(duì)軟件的整體界面和外觀進(jìn)行了較為細(xì)致的優(yōu)化和美觀。目的是為了在提升軟件實(shí)用性的同時(shí)也可以很好的提高用戶(hù)端使用體驗(yàn)感。
好啦!關(guān)于《學(xué)生防疫信息管理軟件》的開(kāi)發(fā)思路就分享到這里,想要源碼的小伙伴可以在這里下載“項(xiàng)目源碼”,或者關(guān)注我的微信公眾號(hào)“灰狼洞主”后臺(tái)回復(fù)“防疫信息管理軟件”獲取源碼下載鏈接。
?
覺(jué)得不錯(cuò)記得點(diǎn)贊關(guān)注喲!
大灰狼陪你一起進(jìn)步!
總結(jié)
以上是生活随笔為你收集整理的超详细的《防疫健康管理软件》开发报告奉上!【文末获取完整源码】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【C语言】从入门到入土(入门篇)
- 下一篇: Nextcloud缩略图尺寸和质量的文档