課程設(shè)計說明書課程名稱 C++項目設(shè)計 設(shè)計題目 學生姓名 學號 專 業(yè) 指導(dǎo)教師 年 月 日 目錄一、系統(tǒng)開發(fā)相關(guān)情況 1(一)開發(fā)背景 1(二)系統(tǒng)開發(fā)的目標 1二、系統(tǒng)以及需求分析 1(一)系統(tǒng)目標 1三、程序功能描述以及模塊結(jié)構(gòu) 2(一)功能模塊描述及主要類描述 2(二)程序流程圖 3(三)數(shù)據(jù)結(jié)構(gòu)表 4四、用戶使用說明與調(diào)試結(jié)果 4(一)使用說明 4(二)調(diào)試結(jié)果 4(三)優(yōu)缺點分析 8五、總結(jié) 8參考文獻: 9附錄:職工信息管理系統(tǒng)源碼(C++) 9隨著信息技術(shù)在管理上越來越深入而廣泛的應(yīng)用,管理信息系統(tǒng)的實施在技術(shù)上已逐步成熟管理信息系統(tǒng)是一個不斷發(fā)展的新型學科,任何一個單位要生存要發(fā)展,要高效率地把內(nèi)部活動有機地組織起來,就必須建立與自身特點相適應(yīng)的管理信息系統(tǒng)本文介紹了在Microsoft Visual C++ 6.0環(huán)境下開發(fā)一個通訊錄的過程。
本系統(tǒng)界面友好,操作簡單,比較實用一、系統(tǒng)開發(fā)相關(guān)情況(一) 開發(fā)背景隨著信息技術(shù)在管理上越來越深入而廣泛的應(yīng)用,管理信息系統(tǒng)的實施在技術(shù)上已逐步成熟管理信息系統(tǒng)是一個不斷發(fā)展的新型學科,任何一個單位要生存要發(fā)展,要高效率地把內(nèi)部活動有機地組織起來,就必須建立與自身特點相適應(yīng)的管理信息系統(tǒng)二)系統(tǒng)開發(fā)的目標為了更好地適應(yīng)我校的要求,進一步提供全方位的信息服務(wù)通訊錄在實施后應(yīng)該能夠達到以下的目標: ★ 能夠準確地記錄職工的相關(guān)信息★ 系統(tǒng)界面友好、操作簡單易行,查詢靈活方便,數(shù)據(jù)儲存安全可靠★ 系統(tǒng)維護安全、方便、可靠,并且能夠?qū)崿F(xiàn)實用性,先進性的要求二、系統(tǒng)以及需求分析(一)系統(tǒng)目標除了前面所述,我們所開發(fā)的系統(tǒng)還應(yīng)該具有以下功能:⑴ 原始數(shù)據(jù)修改簡單方便;⑵ 方便的數(shù)據(jù)查詢;⑶ 刪除數(shù)據(jù)方便簡單,穩(wěn)定性好;⑷ 數(shù)據(jù)計算自動完成,盡量減少人工干預(yù);三、程序功能描述以及模塊結(jié)構(gòu)(一)功能模塊描述及主要類描述 模塊一:增加人員函數(shù)Add();增加通訊錄基本信息模塊二:刪除人員函數(shù)Delete();刪除指定的學生的基本信息模塊三:修改人員函數(shù)Modify();修改指定的通訊錄基本信息。
模塊四:查詢?nèi)藛T信息函數(shù)Query();查詢指定的學生信息模塊五:數(shù)據(jù)存盤,載入函數(shù)Save()以及Load();儲存與載入基本信息模塊六:預(yù)覽數(shù)據(jù)void Look();預(yù)覽比較詳細的信息模塊七:刪除通訊錄void DesTory();刪除已載入的所有的信息模塊八:基礎(chǔ)數(shù)據(jù)設(shè)置函數(shù)void TJ();;統(tǒng)計男女的人數(shù),以及總?cè)藬?shù)本通訊錄采用了面向?qū)ο蟮某绦蛟O(shè)計方法所有的方法均以類為基礎(chǔ)所涉及到的類包括:class Person 基本員工類;該類是一個基類,設(shè)置了屬于保護類的職工基本屬性,以及構(gòu)造函數(shù)Person(char ID,char *Name,int Duty)可以給職工類型繼承Class Manage 管理類;該類定義了管理函數(shù),即前文所述八個模塊功能的實現(xiàn)方法,鏈表的使用也包括其中此類的作能在于將所有功能模塊集成并定義本系統(tǒng)使用的主要方法二)程序流程圖開始定義變量數(shù)據(jù)處理調(diào)用輸出函數(shù)YN輸入C的值C>=1&&C<=8調(diào)用保存函數(shù)調(diào)用預(yù)覽函數(shù)調(diào)用清除函數(shù)調(diào)用查詢函數(shù)調(diào)用輸出函數(shù)調(diào)用修改函數(shù)調(diào)用刪除函數(shù)調(diào)用新增函數(shù)調(diào)用統(tǒng)計函數(shù)退出系統(tǒng)圖 3-1 程序流程圖(三)數(shù)據(jù)結(jié)構(gòu)表序號成員名數(shù)據(jù)類型長度字段含義1Nostring學號2Namechar20名字3Sexchar10性別4Telstring20聯(lián)系方式5Agestring年齡表3-1 數(shù)據(jù)結(jié)構(gòu)表四、用戶使用說明與調(diào)試結(jié)果(一)使用說明這是一個關(guān)于職工信息管理系統(tǒng),具有錄入、輸出、刪除、查詢、修改、保存、統(tǒng)計等功能,建立了一個含有學號、姓名、性別、聯(lián)系方式等成員的類的變量class Person 。
已從文本錄入了范例數(shù)據(jù)調(diào)試過程中,可按照有關(guān)提示進行相關(guān)操作:增加通訊錄按“1”鍵;刪除通訊錄按“2”鍵;修改通訊錄按“3”鍵;查詢詳細通訊錄按“4”鍵;保存通訊錄數(shù)據(jù)設(shè)置按“5”鍵;預(yù)覽通訊錄按“6”鍵;清除通訊錄按“7”鍵;統(tǒng)計數(shù)據(jù)按“8”鍵二)調(diào)試結(jié)果★代碼中運用了switch 語句調(diào)用各子函數(shù),數(shù)字 1、2、3、4、5、6、7、8等七個數(shù)字代表不同的指令★系統(tǒng)啟動時,會自動在存放該系統(tǒng)的磁盤根目錄之下裝入一個數(shù)據(jù)文件:person.txt,調(diào)試時一個數(shù)據(jù)文件都已經(jīng)寫入部分數(shù)據(jù),使用功能“6-預(yù)覽通訊錄”,顯示如下:★指令“n”為退回主界面,“y”代表進入查詢詳細信息界面:可以按照學號、名字、電話號碼查找較詳細信息★指令“2-刪除通訊錄”代表調(diào)用刪除人員函數(shù)Delete(),要求操作者輸入職工的相關(guān)ID,系統(tǒng)根據(jù)操作者輸出的ID,找出對應(yīng)的記錄,然后刪除該職工的信息,如果刪除的是第一個結(jié)點,則 p1->next,指向第二個結(jié)點;下圖示范了刪除第一個節(jié)點之后的顯示結(jié)果:如果刪除的是第i個(0< i
★指令“3-修改人員”代表調(diào)用修改人員函數(shù)Modify(),體統(tǒng)根據(jù)操作者輸入的ID找到對應(yīng)的記錄,將新輸入的數(shù)據(jù)對應(yīng)地賦給要修改的各成員★指令“5-保存數(shù)據(jù)”表示調(diào)用存盤函數(shù)Save(),輸入“Y”或者“N”以進一步操作★指令“8-統(tǒng)計”,調(diào)用TJ();函數(shù),按照男、女統(tǒng)計人數(shù):★指令“7-清除通訊錄”,調(diào)用DesTory()清除已存數(shù)據(jù):(三)優(yōu)缺點分析優(yōu)點:★ 系統(tǒng)中包含了輸入、輸出、保存、刪除、查詢、修改等多種功能,系統(tǒng)操作靈活性較強,功能較強大;★ 可以隨意地選擇不同的指令進行操作;★ 排版效果清晰明了,美觀;★ 操作簡單方便缺點:★ 由于該系統(tǒng)對數(shù)據(jù)采用文本保存方式,所以安全性不可靠★ 采用鏈表結(jié)構(gòu)操作,不能支持超大量的數(shù)據(jù),否則運行緩慢五、總結(jié)本次設(shè)計我們選擇的題目是通訊錄因為事先的計劃非常明確,所以我們在完成這個設(shè)計的過程也是比較順利的在系統(tǒng)分析和設(shè)計的部分仍然花了比較多的時間模塊設(shè)計部分因為涉及功能的實現(xiàn),要從抽象的設(shè)計轉(zhuǎn)化成實際的代碼,因此對于某項功能的實現(xiàn)方法都思考得比較詳盡加上在開發(fā)系統(tǒng)之前,我們閱讀很多與本系統(tǒng)有相關(guān)內(nèi)容的書籍以做參考,使得此次系統(tǒng)編寫能順利進行。
由于班里每個人都需要做一份設(shè)計,所以我們經(jīng)常互相交流在交流的時候經(jīng)常能夠互相提出更好的建議經(jīng)過對通訊錄的分析與編寫,我得到了很大的收獲自主學習的必要性更是解決問題的基礎(chǔ)這次設(shè)計使我重溫了以前學過的各科知識,讓我對C++編程有了更深刻的認識除了對系統(tǒng)作出正確的分析,實際的調(diào)查工作對系統(tǒng)的整體設(shè)計有著至關(guān)重要的作用所以在分析系統(tǒng)之前,我花了一些時間在公司的實際管理工作調(diào)查上也因為這樣,如何編寫代碼逐漸變得明朗每一個功能模塊經(jīng)過調(diào)查后后,各個功能逐漸顯露出來,然后,反復(fù)探討,驗證這項功能是否有存在的必要,是否可以改進得更好在這樣的前提下,最后順利完成了這份設(shè)計 這次C++系統(tǒng)設(shè)計作業(yè),提升了我分析問題的能力和思考問題的邏輯能力,更明白實際調(diào)研的重要性從這次設(shè)計學到的東西,相信會對我們?nèi)蘸蟮膶W習工作起到很大的指導(dǎo)作用附錄:通訊錄系統(tǒng)源碼(C++)#include#include#include#include#include//#includeusing namespace std;string ID;//具有唯一性class Person{protected: string No; //學號 string Age; char Name[20]; //姓名 char Sex[10]; //性別 string Tel; //聯(lián)系方式 Person *next; public: Person(string ID,char *Name,char *Sex,string Age,string Tel) { strcpy(this->Name,Name); strcpy(this->Sex,Sex); this->Tel=Tel; this->No=ID; this->Age=Age; } friend class Manage;};class Manage{private: Person *person;public: Manage() { person=0; Load(); } ~Manage() { Person *p; p=person; while(p) { p=p->next; delete person; person=p; } person=0; } void Find(char Name[20]);//按姓名查找 void Find(string ID);//按編號查找 void Add(); //添加加信息 void Delete(); //刪除信息 void Modify(string ID); //修改信息 void Query(); //查詢信息 void TJ(); //清除文件信息 void Save(); //保存數(shù)據(jù) void Load(); //讀入數(shù)據(jù) void Look();//預(yù)覽 void DesTory(); void Output(Person *p) { cout<<"\t\t學號: "<No<Name<Sex<Age<Tel<>No; cout<No==No) { break; } else { p1=p1->next; } } if(p1!=NULL) { cout<<"該學號已存在,是否修改該學生信息(Y/N) "<>c; if(toupper(c)=='Y') { cout<<"該學生信息為:"<>Name; cout<>Sex; cout<>Age; cout<>Tel; cout<next=0; //學生結(jié)點加入鏈表 if(person) //若已經(jīng)存在結(jié)點 { p2=person; while(p2->next) //查找尾結(jié)點 { p2=p2->next; } p2->next=p; //連接 } else //若不存在結(jié)點(表空) { person=p; //連接 } system("cls"); cout<<"\t\t\t ***添加成功***\n"<>c; if(toupper(c)=='Y') { Add(); return ; } else return ;}void Manage::Delete() //刪除人員 { system("cls"); char c; string No; cout<<"\n** 刪除信息 **\n"; cout<<"輸入要刪除的學生ID:\t"; cin>>No; cout<No==No) break; else { p2=p1; p1=p1->next; } } //刪除結(jié)點 if(p1!=NULL)//若找到結(jié)點,則刪除 { cout<<"所要刪除的學生的信息如下:\n"<>c; if(toupper(c)!='Y') return; // system("pause"); if(p1==person) //若要刪除的結(jié)點是第一個結(jié)點 { person=p1->next; delete p1; } else //若要刪除的結(jié)點是后續(xù)結(jié)點 { p2->next=p1->next; delete p1; } cout<<"\t\t***刪除成功***\n"; cout<<"是否繼續(xù)刪除(Y/N) "<>c; if(toupper(c)=='Y') { Delete(); return ; } else return ; } else //未找到結(jié)點 cout<<"未找到該學生!\n"; getch();}void Manage::Modify(string ID) { Person *p1; char c; p1=person; while(p1) { if(p1->No==ID) break; else { p1=p1->next; } } if(p1!=NULL)//若找到結(jié)點 { system("cls"); cout<<"所要修改的學生的信息如下:\n"<>c; if(c!='5') cout<<"請輸入新的信息: "; switch(c) { case '1': cin>>p1->Name; break; case '2': cin>>p1->Sex; break; case '3': cin>>p1->Age; break; case '4': cin>>p1->Tel; break; default: break; } }while(c!='5'); system("cls"); cout<<"\t ***修改成功***\n"<>c; if(toupper(c)=='Y') { cout<<"請輸入要修改人員的ID: "; cin>>ID; cout<>c; if(toupper(c)!='Y') return; Person *p=person; while(p) { fPerson<No<<" "<Name<<" "<Sex<<" "<Age<<" "<Tel<next; } fPerson.close(); cout<<"\n保存成功...\n"; system("pause");} void Manage::Load() //數(shù)據(jù)讀入{ ifstream fPerson; Person *p=person; string No,Age,Tel; char Name[20],Sex[10]; fPerson.open("person.txt",ios::in); fPerson>>No>>Name>>Sex>>Age>>Tel; while(fPerson.good()) { p=new Person(No,Name,Sex,Age,Tel); p->next=0; //員工結(jié)點加入鏈表 if(person) //若已經(jīng)存在結(jié)點 { Person *p2; p2=person; while(p2->next) //查找尾結(jié)點 { p2=p2->next; } p2->next=p; //連接 } else //若不存在結(jié)點(表空) { person=p; //連接 } fPerson>>No>>Name>>Sex>>Age>>Tel; } fPerson.close(); } void Manage::Find(string ID){ Person *p1; p1=person; while(p1) { if(p1->No==ID) break; else { p1=p1->next; } } if(p1!=NULL) { Output(p1); } else cout<<"未找到該學生"<Name,Name)==0) { count++; Output(p1); } p1=p1->next; } if(count) { cout<<"\t查詢成功!!!"<>c; // system("cls"); cout<>ID; Find(ID); }; break; case '2': { cout<<"輸入姓名 Name: "; cin>>Name; Find(Name); }; break; case '3': { cout<<"輸入電話號碼 Tel"<>Tel; Find(Tel); };break; case '4':break; default: cout<<"輸入有誤 請重新輸入!!!\n"<>c; if(toupper(c)=='Y') { Query(); return ; } else return ; system("pause");}void Manage::Look(){ //設(shè)置字體顏色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN); system("cls"); Person *p1; int count=0; char c; p1=person; while(p1) { cout<<"ID: "<No<<"\t姓名: "<Name<next; } if(count!=0) { cout<<"\n\t\t預(yù)覽成功!!! \n"<>c; if(toupper(c)=='Y') { Query(); return; } else return ; } else { cout<<"尚未創(chuàng)建通訊錄,是否創(chuàng)建(Y/N)"<>c; if(toupper(c)=='Y') { Add(); return; } else return ; }}void Manage::DesTory(){ //設(shè)置字體為紅色 SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY | FOREGROUND_RED); char c; system("cls"); cout<<"\n\t\t\t** 清除信息 **\n"; cout<<"警告:\n 清除通訊錄信息會導(dǎo)致您保存的信息完全消失!!!\n"<>c; if(toupper(c)!='Y') return; cout<<"請再次確認(Y/N)"<>c; if(toupper(c)!='Y') return; else { Person *p; p=person; while(p) { p=p->next; delete person; person=p; } person=0; // ofstream fPerson("person.txt"); // fPerson.close(); } system("pause");}void Manage::TJ(){ Person *p1; int count=0,Boy=0,Girl=0; p1=person; while(p1) { count++; if(strcmp(p1->Sex,"男")==0) Boy++; if(strcmp(p1->Sex,"女")==0) Girl++; p1=p1->next; } cout<<"\n總共有 "<>c; switch(c) { case 1: m.Add(); break; case 2: m.Delete();break; case 3: { system("cls"); cout<<"請輸入要修改人員的ID: "; cin>>ID; cout<>s; if(toupper(s)=='Y') m.Save(); return 0;}25。