第一篇:c++課程設(shè)計(jì)心得體會(huì)
課程設(shè)計(jì)心得體會(huì)
學(xué)生成績(jī)管理是高等學(xué)校教務(wù)管理的重要組成部分,其內(nèi)容較多,要完成能夠?qū)崿F(xiàn)人員的信息錄入、查詢、修改、刪除、統(tǒng)計(jì)、保存、顯示等操作。系統(tǒng)具體實(shí)現(xiàn)的功能如下:
1.添加新的聯(lián)系人
2.刪除所有聯(lián)系人
3.刪除某個(gè)聯(lián)系人
4.查詢某個(gè)聯(lián)系人
5.查詢所有聯(lián)系人
6.將電話本導(dǎo)出到文件
7.從文件導(dǎo)入電話本
8.查詢并編輯某個(gè)聯(lián)系人
9.全班同學(xué)的平均分
大概的算法分析
學(xué)生成績(jī)管理軟件的數(shù)據(jù)結(jié)構(gòu)
學(xué)生成績(jī)一般都是以每個(gè)成員為單位進(jìn)行管理的,一個(gè)學(xué)生學(xué)號(hào)用一個(gè)結(jié)點(diǎn)來表示。考慮到添加、查詢和刪除的方便,這些以學(xué)號(hào)為單位的結(jié)點(diǎn)用鏈表方式組成一個(gè)主目錄。每個(gè)結(jié)點(diǎn)有四個(gè)域:
(1)學(xué)生代號(hào);
(2)課程情況;
(3)成績(jī)信息管理情況;
各函數(shù)的功能和實(shí)現(xiàn)(學(xué)生成績(jī)管理的相關(guān)功能由對(duì)應(yīng)的函數(shù)來實(shí)現(xiàn))(1)添加新的聯(lián)系人
用代碼實(shí)現(xiàn)輸入及輸出添加新的聯(lián)系人的學(xué)號(hào),姓名,性別,生日、語文成績(jī),數(shù)學(xué)成績(jī);完成添加工作。
(2)刪除某個(gè)聯(lián)系人
首先輸入要?jiǎng)h除的姓名,然后要在系統(tǒng)中查看是否有此記錄,再用分支結(jié)構(gòu)實(shí)現(xiàn)刪除鏈表中此員工結(jié)點(diǎn)并修改學(xué)校員工鏈表及未找到這條記錄;因?yàn)榭赡芟到y(tǒng)中不存在此記錄。
(3)刪除所有聯(lián)系人
此功能要逐條刪除聯(lián)系人,則我們采用分支、循環(huán)結(jié)構(gòu)實(shí)現(xiàn)首先遍歷是否有給記錄,輸出讀取記錄或沒有該記錄;再到文件是否讀完,若沒讀完則要循環(huán)繼續(xù)讀取,否則已刪除了所有記錄。
(4)查詢某個(gè)聯(lián)系人
因此功能會(huì)出現(xiàn)還沒有任何記錄、未找到這條記、輸出該聯(lián)系人信息三種情況,我們則選用簡(jiǎn)單的三分支結(jié)構(gòu);首先要請(qǐng)輸入要查詢聯(lián)系人的姓名,輸出有記錄或還沒有任何記錄,有記錄則遍歷所有人,最后是未找到這條記錄,輸出該聯(lián)系人信息。
(7)從電話本導(dǎo)入文件的流程圖
首先查看是否有記錄,輸出沒有任何記錄或打開“Manager.txt”,歷遍鏈表,將人員結(jié)點(diǎn)信息寫入文件Manager.txt、關(guān)閉文件,最后成功保存到Manager.txt。
其余的函數(shù)功能實(shí)現(xiàn)相似則不重復(fù)。
心得體會(huì)
剛放假不久,我們組的積極分子們就張羅著要開始編寫程序了,編寫這個(gè)程序我們經(jīng)歷了討論選題,編寫代碼,調(diào)試,寫設(shè)計(jì)報(bào)告等。在這期間我們查閱了很多相關(guān)的資料,曾盯著課本發(fā)呆過,我們成員之間也曾進(jìn)行過激烈的口舌論戰(zhàn)。經(jīng)過這個(gè)暑假來的實(shí)踐學(xué)習(xí),使我們對(duì)C++語言有了更進(jìn)一步的認(rèn)識(shí)和了解,要想學(xué)好它,則重在實(shí)踐,要通過不斷的上機(jī)操作及實(shí)例運(yùn)用才能更好地深入體會(huì)它,當(dāng)然通過實(shí)踐,我們也發(fā)現(xiàn)我們的好多不足之處。就比如我們對(duì)C++語言的一些標(biāo)準(zhǔn)庫函數(shù)不太了解,還有對(duì)函數(shù)調(diào)用的正確使用不夠熟悉,一些經(jīng)常出現(xiàn)的錯(cuò)誤也不能很好地處理。我們編寫這個(gè)程序使用的是比較簡(jiǎn)單的函數(shù)及結(jié)構(gòu),由于我們的水平有限,還不能很好的使用一些效率高的方式來編寫,所以也沒有突出的創(chuàng)新點(diǎn)。在做題的時(shí)候我們都是分工合作。分工完成結(jié)構(gòu)體、函數(shù)設(shè)計(jì)、算法分析等,這些過程中總是有很多錯(cuò)誤出現(xiàn),有好多的小問題都是我們粗心大意造成的,所以設(shè)計(jì)程序一定要仔細(xì),不容一點(diǎn)的馬虎。當(dāng)然也有大問題,關(guān)于文件的操作,類的使用等等這些使用我們都琢磨了很久,在解決錯(cuò)誤時(shí)我們有時(shí)幾乎焦頭爛額了。但是我們與隊(duì)友之間都會(huì)不斷的相互鼓勵(lì)、支持,彼此都努力維護(hù)著將作業(yè)寫完。雖然這設(shè)計(jì)有點(diǎn)枯燥無味,但是當(dāng)最后我們大功告成時(shí),回味起來還是美滋滋的。總的來說我們真的是在設(shè)計(jì)的過程中受益匪淺。
第二篇:c++課程設(shè)計(jì)總結(jié)
課程設(shè)計(jì)總結(jié)
經(jīng)過一個(gè)學(xué)期對(duì)《C++程序設(shè)計(jì)》的學(xué)習(xí),我學(xué)習(xí)到了基本的理論知識(shí),了解到了C++語言程序設(shè)計(jì)的思想,這些知識(shí)都為我的課程實(shí)踐和進(jìn)一步的學(xué)習(xí)打下了堅(jiān)實(shí)的基礎(chǔ)。在為期近兩周的C++課程設(shè)計(jì)中,我體會(huì)頗多,學(xué)到了很多東西。我加強(qiáng)了對(duì)C++程序設(shè)計(jì)這門課程的認(rèn)識(shí),并且復(fù)習(xí)了自己以前學(xué)習(xí)到的知識(shí)。這些都使得我對(duì)計(jì)算機(jī)語言的學(xué)習(xí)有了更深入的認(rèn)識(shí)!總之,通過這次課程設(shè)計(jì),我收獲頗豐,相信會(huì)為自己以后的學(xué)習(xí)和工作帶來很大的好處。像職工信息表這樣的程序設(shè)計(jì),經(jīng)歷了平時(shí)在課堂和考試中不會(huì)出現(xiàn)的問題和考驗(yàn)。而這些問題,這并不是我們平時(shí)只靠課本,就可以輕易解決的。所以,鍛煉了我們挑戰(zhàn)難題,學(xué)會(huì)用已掌握的知識(shí)去解決具體問題的能力,進(jìn)一步培養(yǎng)了獨(dú)立思考問題和解決問題的能力。特別是學(xué)會(huì)了在Visual C++中如何調(diào)試程序的方法。當(dāng)然,老師的指導(dǎo)和同學(xué)的幫助也是不可忽視的,他們給了我許多提示和幫助,教會(huì)了我編譯復(fù)雜程序的方法。
在老師和同學(xué)的幫助下,通過自己的努力,終于完成了這次職工信息表的簡(jiǎn)單課程設(shè)計(jì)。我經(jīng)過這段時(shí)間的編程,對(duì)其中的艱辛,我是深有體會(huì)。從剛開始的選擇程序、理解程序到后來的調(diào)試程序以及改進(jìn)程序這個(gè)過程中,我遇到了各種各樣的困難和挫折。但是我堅(jiān)定信念,對(duì)自己充滿了信心,想盡一切辦法克服重重困難。
通過課程設(shè)計(jì)的訓(xùn)練,我進(jìn)一步學(xué)習(xí)和掌握了對(duì)程序的設(shè)計(jì)和編寫,從中體會(huì)到了面向?qū)ο蟪绦蛟O(shè)計(jì)的方便和巧妙。懂得了在進(jìn)行編寫一個(gè)程序之前,要有明確的目標(biāo)和整體的設(shè)計(jì)思想。另外某些具體的細(xì)節(jié)內(nèi)容也是相當(dāng)?shù)闹匾_@些寶貴的編程思想和從中摸索到的經(jīng)驗(yàn)都是在編程的過程中獲得的寶貴財(cái)富。這些經(jīng)驗(yàn)對(duì)我以后的編程會(huì)有很大的幫助的,我要好好利用。
雖然這次課程設(shè)計(jì)是在參考程序的基礎(chǔ)之上進(jìn)行的,但是我覺得對(duì)自己是一個(gè)挑戰(zhàn)和鍛煉。我很欣慰自己能在程序中加入自己的想法和有關(guān)程序內(nèi)容,也就是對(duì)它的程序改進(jìn)了一番改進(jìn),并有創(chuàng)新。但是我感覺自己的創(chuàng)新還不夠典型,總之還不是很滿意。另外由于時(shí)間的緊迫和對(duì)知識(shí)的了解不夠廣泛,造成了系統(tǒng)中還存在許多不足,功能上還不夠完善。以后我會(huì)繼續(xù)努力,大膽創(chuàng)新,爭(zhēng)取能編寫出透射著自己思想的程序。這次課程設(shè)計(jì)讓我充分認(rèn)識(shí)到了自己的不足,認(rèn)識(shí)到了動(dòng)手能力的重要性。我會(huì)在以后的學(xué)習(xí)中更加努力鍛煉自己,提高自己,讓自己寫出更好更完善的程序,為以后的編程打好基礎(chǔ)!
總而言之,這次C++程序設(shè)計(jì)實(shí)踐讓我收獲很大。
計(jì)算機(jī)科學(xué)與技術(shù)13-2班
2010年7月4日
第三篇:C++課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告(范文)
C++課程設(shè)計(jì)報(bào)告
設(shè)計(jì)題目:
學(xué)
院: 專業(yè)班級(jí): 學(xué)生姓名: 學(xué)生學(xué)號(hào): 指導(dǎo)教師:
計(jì)算機(jī)技術(shù)與科學(xué)
3班 樊冠男 40912140 馬軍亮
提交時(shí)間:
2011/1/12 成績(jī):
目錄
C++課程設(shè)計(jì)報(bào)告
第一章 引言
C++課程設(shè)計(jì)報(bào)告
第二章 概要設(shè)計(jì)
C++課程設(shè)計(jì)報(bào)告
第三章 軟件實(shí)現(xiàn)
C++課程設(shè)計(jì)報(bào)告
第四章 結(jié)果與討論
第四篇:C++課程設(shè)計(jì)電話簿管理
C++課程設(shè)計(jì)
————簡(jiǎn)單電話簿管理
報(bào)告內(nèi)容: 一.程序功能簡(jiǎn)介 二.課程設(shè)計(jì)要求 三.課程設(shè)計(jì)說明 四.參考數(shù)據(jù)結(jié)構(gòu) 五.具體功能及實(shí)現(xiàn)六.源程序及注釋 七.感想與心得
學(xué)號(hào):050930109 姓名:陳浩 指導(dǎo)老師:臧洌 日期:2010年6月20日
一.程序功能簡(jiǎn)介
一個(gè)基本的電話簿管理程序,具有插入、刪除、顯示、修改和查詢聯(lián)系人電話碼的功能。主菜單如右圖所示,每個(gè)菜單項(xiàng)功能如下:
1.增加記錄菜單:請(qǐng)輸入用戶姓名,如果該用戶已經(jīng)存在則添加失敗,否則,輸入用戶的電話號(hào)碼,進(jìn)行添加。
2.修改某條記錄:請(qǐng)輸入用戶姓名,如果沒有該用戶顯示“ 該用戶不存在”信息,否則,輸出原電話號(hào)碼,然后輸入新的電話號(hào)碼,進(jìn)行修改。3.刪除記錄:
輸入用戶姓名,進(jìn)行刪除(刪除時(shí)要進(jìn)行確認(rèn))。4.查詢:輸入用戶姓名,進(jìn)行查找。
5.排序:根據(jù)子菜單,選擇不同的排序方式。6.顯示:逐屏顯示(每屏顯示10條記錄)。7.全刪:進(jìn)行全部刪除(要確認(rèn))。
二.課程設(shè)計(jì)要求
請(qǐng)選擇以下功能 1-增加記錄 2-修改記錄 3-刪除記錄
4-查找(按姓名)5-排序 6-顯示記錄
1.用漢化菜單實(shí)現(xiàn)。
2.提供按姓名查詢電話號(hào)碼的功能。
3.顯示功能(提供逐屏顯示的功能,每屏顯示10條記錄)。4.刪除和修改時(shí)要進(jìn)行確認(rèn)。
5.將電話簿記錄以文件的形式存在磁盤上;每次操作時(shí)將電話簿調(diào)出,操作完畢后存盤。
三.課程設(shè)計(jì)說明
1.程序采用數(shù)組數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)。2.用類來實(shí)現(xiàn)數(shù)據(jù)的封裝。
四.參考數(shù)據(jù)結(jié)構(gòu)
1.“電話簿”稱為用戶信息表,用數(shù)組實(shí)現(xiàn)。用戶信息表由若干用戶信息構(gòu)成,每個(gè)用戶信息是一個(gè)數(shù)組元素。
2.“user.txt”是一個(gè)文件,用于保存“用戶信息表”中的信息。當(dāng)系統(tǒng)啟動(dòng)時(shí),從該文件中讀入信息,當(dāng)退出系統(tǒng)時(shí),將“用戶信息表”中的信息寫到該文件中。該文件中信息存放形式如下:
ZhangHong 5221369 LiLi 84891112
ZhaoQiang 5221498
其中 ??name(姓名)占20列 ??phone_num(電話號(hào)碼)占12列
五.具體功能及實(shí)現(xiàn)
定義Fphone類,通過其私有成員數(shù)組name[20]和phone[12]分別記錄用戶姓名與電話號(hào)碼,定義UserDatabase類記錄用戶信息,通過公有成員函數(shù)實(shí)現(xiàn)對(duì)數(shù)據(jù)的操作。
六.源程序及注釋
#include
//用戶信息類的定義 {
char name[M];
// 姓名
char phone_num[N];
//電話號(hào)碼 public: Fphone(char *na=“",char *ph=”“){ strcpy(name,na);
strcpy(phone_num,ph);} char*getname();
//獲取姓名
char*getphone_num();
//獲取電話號(hào)碼
void setname(char*a);
//設(shè)置姓名
void setphone_num(char*a);//設(shè)置電話號(hào)碼
void disp();
//顯示用戶信息 };char *Fphone::getname()
{ return name;} char *Fphone::getphone_num(){ return(phone_num);} void Fphone::setname(char *a){ strcpy(name,a);
} void Fphone::setphone_num(char*a){ strcpy(phone_num,a);} void Fphone::disp(){ cout<<”姓名:“<
//用戶信息表中的元素個(gè)數(shù),即當(dāng)前記錄總數(shù)
int Maxu;
//最多的用戶
Fphone *user;
//指向用戶信息表的指針
public: UserDatabase()
//構(gòu)造函數(shù),初始化用戶信息表,將user.txt文件中數(shù)據(jù)讀到User[]中
{ nElem=0;
Maxu=50;
user=new Fphone[Maxu];
fstream in;
in.open(”user.txt“,ios::in|ios::nocreate);//打開文件
for(int i=0;(!in.eof());i++)
{ in>>user[i].getname();in>>user[i].getphone_num();
nElem++;
}
in.close();}
~UserDatabase()
//析構(gòu)函數(shù),將user[]寫入user.txt文件中
{ fstream out;
Fphone *p=NULL;
p=user;
out.open(”user.txt“,ios::out,filebuf::sh_none);
for(int i=0;i { out< <<((p+i)->getphone_num())< }delete []user; out.close();} void clear() //刪除所有用戶信息 { char ord; cout<<”確定刪除嗎?(選擇:[y]是;[n]否)aa“< do { cin>>ord; if(ord=='N'||ord=='n')return; else if(ord=='Y'||ord=='y') { delete[Maxu]user; } user=0;cout<<”刪除成功啦!“< user->setname(na); user->setphone_num(ph_num); } else if(nElem { if(strcmp((user+i)->getname(),na)>0) {(user+i+1)->setname(((user+i)->getname())); (user+i+1)->setphone_num(((user+i)->getphone_num())); } else break; } (user+i+1)->setname(na); (user+i+1)->setphone_num(ph_num); nElem++;} else cout <<”空間不足,無法添加!“< //返回user指針 { return(user);} void delete_record(Fphone *p,int k) //刪除用戶信息 { char con;cout<<”確認(rèn)刪除?(Y/N)“;cin>>con;if(con=='N'||con=='n')return;else if(con=='Y'||con=='y'){ for(int i=k;i { user[i]=user[i+1];} nElem--; cout<<”已刪除!“< return;} else { cout<<”輸入錯(cuò)誤!“< system(”pause“); return;} } void modify_record(Fphone *p,char*ph_num)//修改用戶信息 { p->setphone_num(ph_num);} Fphone *query(char *na) //按姓名查找 順序查找,這里也可以用折半 { Fphone *p=user; int i=0; while(1) { if(strcmp(p->getname(),na)==0) return p; p++; if(i++==nElem) break;} return NULL;} void sorta_name()//按姓名升序排序 插入排序法 { Fphone temp;int i,j;for(i=1;i for(j=i-1;j>=0&&(strcmp(temp.getname(),user[j].getname())<0);j--) { strcpy(user[j+1].getname(),user[j].getname()); strcpy(user[j+1].getphone_num(),user[j].getphone_num()); } strcpy(user[j+1].getname(),temp.getname()); strcpy(user[j+1].getphone_num(),temp.getphone_num());} } void sorta_phonenum()//按電話號(hào)碼升序排序 選擇排序法 { int i,j,p;Fphone temp;for(i=0;i for(j=i+1;j if(strcmp(user[j].getphone_num(),user[p].getphone_num())<0)p=j; if(p!=i) { strcpy(temp.getname(),user[p].getname()); strcpy(temp.getphone_num(),user[p].getphone_num()); strcpy(user[p].getname(),user[i].getname()); strcpy(user[p].getphone_num(),user[i].getphone_num()); strcpy(user[i].getname(),temp.getname()); strcpy(user[i].getphone_num(),temp.getphone_num()); } } } void sort_name()//按姓名降序排序,將排成升序的對(duì)象數(shù)組逆向放置 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i strcpy(temp.getphone_num(),user[i].getphone_num()); strcpy(user[i].getname(),user[nElem-i-1].getname()); strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num()); strcpy(user[nElem-i-1].getname(),temp.getname()); strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void sort_phonenum()//按電話號(hào)碼降序排序 冒泡排序法 { Fphone temp;int i,m=(nElem+1)/2;for(i=0;i strcpy(temp.getphone_num(),user[i].getphone_num()); strcpy(user[i].getname(),user[nElem-i-1].getname()); strcpy(user[i].getphone_num(),user[nElem-i-1].getphone_num()); strcpy(user[nElem-i-1].getname(),temp.getname()); strcpy(user[nElem-i-1].getphone_num(),temp.getphone_num());} } void disp(){ int i,n=0;cout< cout< < n++; if(n%10==0) { system(”pause“); system(”cls“); } } cout< 請(qǐng)選擇以下功能:“< 1-增加記錄“< 2-修改記錄“< 3-刪除記錄“< 4-查找(按姓名)“< 5-排序“< 6-顯示記錄“< 7-全刪“< 0-退出“< 輸入選擇:“< “< “< 歡迎使用電話簿管理系統(tǒng) “< 祝您使用愉快 “< “< system(”cls“); menu(); int k; cin>>k; switch(k) { case 1: { system(”cls“) cout<<”*****************************************“< cout<<” 增加記錄 “< Fphone *t=NULL; char w; do { cout<<”請(qǐng)輸入您要增加的用戶的姓名“; cin>>na; t=(s.query(na)); if(t) { cout<<”用戶已經(jīng)存在,添加失敗!!“< else { cout<<”請(qǐng)輸入用戶的電話號(hào)碼“; cin>>ph_num; s.add_record(na,ph_num);cout<<”您添加的信息為:“;cout<<”姓名:“< } cout<<”是否繼續(xù)?(Y or N)“< cin>>w;} while(w=='Y');break;} case 2: { system(”cls“); cout<<”***************************************“< 修改記錄 “< char na[M],ph_num[N]; Fphone *t=NULL; char w; do { cout<<”請(qǐng)輸入您要修改的用戶的姓名“; cin>>na; t=s.query(na); if(!t) cout<<”沒有該用戶!“< else { cout<<”該用戶原號(hào)碼為:“< cout<<”請(qǐng)輸入新的電話號(hào)碼“; cin>>ph_num; s.modify_record(t,ph_num); cout<<”成功修改“< } cout<<”是否繼續(xù)?(Y or N)“< cin>>w; } while(w=='Y'); break;} case 3: { system(”cls“); cout<<”********************************************“< 刪除記錄 “< cout<<”************** ***************************“< char w; char na[M]; int k; Fphone *p; do { cout<<”請(qǐng)輸入您要?jiǎng)h除的用戶的姓名“; cin>>na; p=s.query(na); if(p==0) cout<<”沒有該用戶!“< else {(*p).disp(); k=p-s.getuser(); s.delete_record(p,k); } cout<<”是否繼續(xù)?(Y or N)“< cin>>w; } while(w=='Y'); break;} case 4: { system(”cls“); cout<<”*********************************“< cout<<” 查詢記錄 “< cout<<”**********************************“< char na[M];int p=1; Fphone *t=NULL; char w; do { cout<<”請(qǐng)輸入您要查詢的用戶的姓名“; cin>>na; t=s.query(na); if(t) { cout<<”姓名:“< cout<<”電話號(hào)碼:“< } else cout<<”對(duì)不起,沒有此人信息!“< cout<<”是否繼續(xù)?(Y or N)“< cin>>w;} } case 5: { while(w=='Y');break;system(”cls“); cout<<” 請(qǐng)選擇排序方式 “< cout<<” 1.按姓名(升序) “< cout<<” 2.按電話號(hào)碼(升序) “< cout<<” 3.按姓名(降序) “< cout<<” 4.按電話號(hào)碼(降序) “< cout<<” 請(qǐng)輸入你的選擇: “< int k; cin>>k; switch(k) { case 1: s.sorta_name(); cout<<”排序完成“< system(”cls“); break; case 2: s.sorta_phonenum(); cout<<”排序完成“< system(”cls“); break; case 3: s.sort_name(); cout<<”排序完成“< system(”cls“); break; case 4: s.sort_phonenum(); cout<<”排序完成“< system(”cls“); break; } } case 6: { system(”cls“); cout<<”*****************************************“< cout<<” 顯示記錄 “< cout<<”*****************************************“< s.disp(); system(”pause“);break; } } } case 7: { system(”cls“); cout<<”您確定要?jiǎng)h除所有記錄嗎?(Y or N)“< char q; cin>>q; if(q=='Y'||q=='y') { cout<<”*********************************“< cout<<” 全部刪除記錄 “< cout<<”*********************************“< s.clear(); } else break; system(”pause“); break;} case 0: { system(”cls“); cout<<”謝謝使用,再見!“< exit(0);} default: cout<<”不存在該選擇,請(qǐng)重新輸入要進(jìn)行的操作:“< system(”pause"); break;} 七.感想與心得 1.電話簿管理程序較長(zhǎng),算法比較復(fù)雜,調(diào)試的過程中遇到了各種各樣的問題。各種各樣的小錯(cuò)誤尋找起來十分困難。在今后編寫程序時(shí)應(yīng)當(dāng)隨編隨找錯(cuò)。 2.課設(shè)讓我們把這一學(xué)期所學(xué)的C++知識(shí)得到了很好的應(yīng)用,開拓了我們的思路,所謂溫故而而知新,這次課設(shè)也讓我們對(duì)以前的知識(shí)有了一個(gè)全面的回顧,加深了對(duì)已學(xué)知識(shí)的理解。 3.課設(shè)過程艱辛,花費(fèi)時(shí)間很長(zhǎng),需要很強(qiáng)的耐力和信心。而這也是對(duì)我們的一次考驗(yàn),養(yǎng)成了堅(jiān)持不懈和吃苦耐勞的精神。總之,C++課設(shè)讓我們學(xué)到了很多,也收獲了很多,這必將成為我人生中的一個(gè)深刻的回憶。 C++/數(shù)據(jù)結(jié)構(gòu) 大作業(yè)/課程設(shè)計(jì)——【校園導(dǎo)游咨詢】【停車場(chǎng)管理】娃娃們可以收著以后用 絕對(duì)純手工打造 內(nèi)含類模塊/一維指針數(shù)組(謹(jǐn)以此程序供大家參考。運(yùn)行結(jié)果后面有貼圖) 目錄 【1】校園導(dǎo)游咨詢 程序設(shè)計(jì)源代碼 及 截圖 【2】停車場(chǎng)管理——方案一 程序設(shè)計(jì)源代碼 及 截圖 【3】停車場(chǎng)管理——方案二 程序設(shè)計(jì)源代碼 及 截圖 【1】【【校園導(dǎo)游咨詢】】 ###### (ps:該校園導(dǎo)游咨詢系統(tǒng)沒有輸入值,所有信息是都在class MGraph的構(gòu)造函數(shù)中傳輸?shù)模倚@景點(diǎn)信息皆為【【上海電力學(xué)院】】景點(diǎn)信息。請(qǐng)大家注意,直接從文章copy到visual stutio中會(huì)出現(xiàn)中文字符,注意刪除,推薦大家在一行語句的分號(hào)后面,點(diǎn)出光標(biāo),按一下delete鍵,然后按一下enter鍵,完成visual stutio的自動(dòng)對(duì)齊,這樣程序看起來一目了然,更易于操作和更改)【問題描述】 設(shè)計(jì)一個(gè)校園導(dǎo)游程序,為來訪的客人提供各種信息查詢服務(wù)。【基本要求】 (1)設(shè)計(jì)你所在學(xué)校的校園平面圖,所含景點(diǎn)不少于10個(gè)。以圖中頂點(diǎn)表示校內(nèi)各景點(diǎn),存放景點(diǎn)名稱、代號(hào)、簡(jiǎn)介等信息;以邊表示路徑,存放路徑長(zhǎng)度等相關(guān)信息。(2)為來訪客人提供圖中任意景點(diǎn)相關(guān)信息的查詢。 (3)為來訪客人提供圖中任意景點(diǎn)的問路查詢,即查詢?nèi)我鈨蓚€(gè)景點(diǎn)之間的一個(gè)最短的簡(jiǎn)單路徑。【選作內(nèi)容】 (6)擴(kuò)充每個(gè)景點(diǎn)的鄰接景點(diǎn)的方向等信息,使得路徑查詢結(jié)果能提供詳盡的導(dǎo)向信息。**************************【以下為類的定義】******************************** #include class direction;template { friend class MGraph direction dir;//存放頂點(diǎn)方位信息的direction類的dir。}; class direction { public: int ln;//存放在方向圖中的橫坐標(biāo),表示東西 int col;//存放在方向圖中的縱坐標(biāo),表示南北 };template { public: MGraph(); //構(gòu)造函數(shù),初始化具有n個(gè)頂點(diǎn)的圖 void printvexname();//顯示所有景點(diǎn)及景點(diǎn)代號(hào) void printvexinf(int i);//顯示代號(hào)為i景點(diǎn)的名稱及信息 void printroad(int i,int j);//顯示景點(diǎn)i~j的最短路徑方案信息 void printdir(int i,int j);//顯示景點(diǎn)i到j(luò)的方向信息,如“向東100m,向南200m” VertexNode void Root(int p,int q);//遞歸尋找pq間的最短路徑 int Path[MaxSize][MaxSize],Dist[MaxSize][MaxSize];//創(chuàng)建Path和Dist分別存放兩點(diǎn)間最短路徑的前驅(qū)節(jié)點(diǎn),兩點(diǎn)間最短路徑長(zhǎng)度 int Line[MaxSize];//Line存放路徑 int kkk;//Line[]數(shù)組的標(biāo)記 private: T vertex[MaxSize];//存放圖中頂點(diǎn)的數(shù)組 int arc[MaxSize][MaxSize];//存放圖中邊的數(shù)組 };*************************【以下為類的實(shí)現(xiàn) 即類函數(shù)的定義】*********************************** template //s[]為存放景點(diǎn)鄰接矩陣信息的一維數(shù)組,根據(jù)其對(duì)稱性可以用公式賦值給二維數(shù)組arc[][] { int s[]={0, 1,0, 0,2,0, 0,0,2,0, 0,0,2,3,0, 0,0,0,4,2,0, 0,0,0,0,2,3,0, 0,0,0,0,2,3,1,0, 0,0,2,0,2,0,0,2,0, 4,0,2,0,0,0,0,0,1,0, 0,0,0,0,0,0,0,0,0,2,0, 1,0,0,0,0,0,0,0,0,0,2,0, 0,0,0,0,0,0,0,0,0,3,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0, 0,0,0,0,0,0,0,0,0,0,0,0,3,0,0,2,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0,2,0};int a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17};char* b[]={“南門”,“實(shí)驗(yàn)樓”,“南圖”,“大活”,“睿思樓”,“大禮堂”, “南4教”,“知行樓”,“國交樓”,“南3教”,“南2教”,“南1教”, “北圖”,“北3教”,“北4教”,“北2教”,“北1教”,“北門”};char* c[]={“南校區(qū)正門”,“物理實(shí)驗(yàn)樓”,“南校區(qū)圖書館”,“大學(xué)生活動(dòng)中心”, “教師辦公樓、醫(yī)務(wù)室及留學(xué)生公寓”,“大禮堂,用于舉辦各種文藝演出”,“南校區(qū)第4教學(xué)樓”,“實(shí)習(xí)基地,計(jì)算機(jī)房等”, “國際交流中心,教職工餐廳”,“南校區(qū)第3教學(xué)樓”,“南校區(qū)第2教學(xué)樓”,“南校區(qū)第1教學(xué)樓”, “北校區(qū)圖書館”,“北校區(qū)第3教學(xué)樓”,“北校區(qū)第4教學(xué)樓”,“北校區(qū)第2教學(xué)樓”, “北校區(qū)第1教學(xué)樓”,“北校區(qū)正門”};int d[]={8,6,4,4,1,0,0,1,3,4,6,8,4,3,2,3,5,8};int e[]={8,8,8,10,8,10,7,6,6,6,6,6,3,1,0,0,0,2};int i,j;vertexNum=18;arcNum=30; for(i=0;i for(j=0;j template cout<<“向東”< cout<<“向南”< if(Path[p][q]>0){ Root(p,Path[p][q]);Root(Path[p][q],q);} else { Line[kkk]=q;kkk++;} } template for(q=0;q Dist[p][q]=Dist[p][k]+Dist[k][q];Path[p][q]=k;} cout<<“n=======n”;cout<<“從”< { int choice;cout<<“================”< 【2】【停車場(chǎng)管理系統(tǒng)【方案一 程序】】 ###### (ps:該程序有漏洞,若將要離開的車輛是停于便道上的,則對(duì)該車進(jìn)行駛離操作時(shí)程序內(nèi)部有錯(cuò)誤數(shù)據(jù),雖然做了函數(shù)完成這一功能,但因時(shí)間有限,沒能及時(shí)查找更正,現(xiàn)在懶得改了。。大家將就看吧。不過運(yùn)行是可以的)【問題描述】 設(shè)停車場(chǎng)是一個(gè)可停放n輛汽車的 長(zhǎng)通道,且只有一個(gè)大門可供汽車進(jìn)出。汽車在停車場(chǎng)內(nèi)按車輛到達(dá)時(shí)間的先后順序,依次由北向南排列(大門在最南端,最先到達(dá)的第一輛車信放在車場(chǎng)的最北端),若車場(chǎng)內(nèi)已停滿n輛汽車,則后來的汽車只能在門外的便道上等候,一旦有車開走,則排在便道上的第一輛車即可開入;當(dāng)停車場(chǎng)內(nèi)某輛車要離開時(shí),在它之后進(jìn)入的車輛必須先退出車場(chǎng)為它讓路,待該輛車開出大門外,其他車輛再按原次序進(jìn)入車場(chǎng)院,每輛停放在車場(chǎng)的車在它離開停車場(chǎng)時(shí)必須按它停留的時(shí)間長(zhǎng)短交納費(fèi)用。試為停車場(chǎng)編制按上述要求進(jìn)行管理的模擬程序。【基本要求】 以棧模擬停車場(chǎng),以隊(duì)列模擬車場(chǎng)外的便道,按照從終端讀入的輸入數(shù)據(jù)序列進(jìn)行模擬管理。每一組輸入數(shù)據(jù)包括三個(gè)數(shù)據(jù)項(xiàng):汽車“到達(dá)”或“離去”信息、汽車牌照號(hào)碼以及到達(dá)或離去的時(shí)刻。對(duì)每一組輸入數(shù)據(jù)進(jìn)行操作后的輸出信息為:若是車輛到達(dá),則輸出汽車在停車場(chǎng)內(nèi)或便道上的停車位置;若是車輛離去,則輸出汽車在停車場(chǎng)內(nèi)停留的時(shí)間和應(yīng)交納的費(fèi)用(在便道上停留的時(shí)間不收費(fèi))。棧以順序結(jié)構(gòu)實(shí)現(xiàn),隊(duì)列以鏈表結(jié)構(gòu)實(shí)現(xiàn)。【測(cè)試數(shù)據(jù)】 設(shè)n=2,輸入數(shù)據(jù)為:(A,1,5),(A,2,15),(A,3,20),(A,4,25),(A,5,30),(D,2,35),(D,4,40),(E,0,0)。其中:A表示到達(dá)(Arrival);D表示離去(Departure);E表示輸入結(jié)束(End)。**************************【以下為類的定義】************************************* #include const double price=30;//每小時(shí)的費(fèi)用 //思想:(報(bào)告第四頁) //我的系統(tǒng)界面,輸入信息為:(到達(dá)/離開/退出);車牌號(hào);時(shí)刻 //因此,我的停車場(chǎng)類分成車輛到達(dá)和車輛離開兩個(gè)主要的函數(shù)實(shí)現(xiàn)。//車輛到達(dá),有入棧和入隊(duì)。車輛離開有出棧,出隊(duì)和入棧操作。 //因此我又編寫入棧的類,隊(duì)的類。與parkingmanagement進(jìn)行友元。 //**************************************類定義*********************************************** class car//車的信息類 { public: double time;//計(jì)費(fèi)時(shí)間 int number;//車牌號(hào) car *next;//存放car類型元素的數(shù)組初始地址 };class carstack//棧(停車場(chǎng))的類 { friend class parkingmanagement;//parkingmanagement能訪問carstack類中所有成員 public: carstack();//構(gòu)造函數(shù),棧的初始化 int empty();//判斷棧是否為空 int full();//判斷棧是否為滿 car *s;//存放car類型棧元素的數(shù)組初始地址 int top;//棧頂指針 };class carqueue//隊(duì)列(便道)的類 { friend class parkingmanagement;//parkingmanagement能訪問carstack類中所有成員 public: carqueue();//構(gòu)造函數(shù),隊(duì)列的初始化 int full();//判斷隊(duì)列是否為滿 car *front,*rear;//存放car類型隊(duì)列元素的數(shù)組初始地址 };class parkingmanagement { public: int pushstack(carstack &cs,int cnum,double ctime);//入棧,cs棧內(nèi)進(jìn)行調(diào)整,返回棧內(nèi)位置 void popstack(carstack &cs,int cnum);//出棧,cs棧內(nèi)進(jìn)行調(diào)整,//根據(jù)車牌號(hào)把車彈出棧,將出棧car的number賦值給int popstacknumber()//將出棧car的time賦值給double popstacktime(),無返回值! int pushqueue(carqueue &cq,int cnum,double ctime);//入隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回隊(duì)內(nèi)位置 int popqueue(carqueue &cq);//出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車車牌號(hào) void arrival(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛到達(dá),//根據(jù)輸入的車牌號(hào)、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車位信息 void leave(carstack &cs,carqueue &cq,int cnum,double ctime);//車輛離開,//根據(jù)輸入的車牌號(hào)找到汽車,并進(jìn)行出棧操作、出隊(duì)操作和入棧操作; //并cout停留時(shí)間和收費(fèi)情況 void deletequeue(carqueue &cq,int i);//刪除cq過道中第i輛車 int popstacknumber;//專門存放出棧的時(shí)候返回的車牌號(hào) double popstacktime;//專門存放出棧的時(shí)候返回的時(shí)刻 };**********************************【以下為類的實(shí)現(xiàn)】************************************ carstack::carstack()//構(gòu)造函數(shù),棧的初始化 { top=-1;s=new car[Max];//創(chuàng)建car類型棧元素的數(shù)組 if(s==NULL){ cout<<“棧空間分配不成功!”< cs.top++;(cs.s[cs.top]).number=cnum;//將cnum賦給棧頂位置的車的車牌號(hào),s是car類型棧元素的數(shù)組(cs.s[cs.top]).time=ctime;//將ctime賦給棧頂位置的車的入棧時(shí)間,s是car類型棧元素的數(shù)組 return(cs.top+1);//返回棧內(nèi)位置加1,即停車場(chǎng)內(nèi)車位從1號(hào)開始 } } void parkingmanagement::popstack(carstack &cs,int cnum)//出棧,cs棧內(nèi)進(jìn)行調(diào)整,//根據(jù)車牌號(hào)把車彈出棧,將出棧car的number賦值給int popstacknumber //將出棧car的time賦值給double popstacktime,無返回值!{ int i;car p;carstack stemp;//定義一個(gè)carstack類型的臨時(shí)存放出棧元素的棧 for(i=0;i<=cs.top;i++)if((cs.s[i]).number==cnum)break;//當(dāng)要出棧的車的車牌號(hào)=棧內(nèi)的車牌號(hào)元素時(shí),跳出循環(huán) p=cs.s[i];//將要出棧的元素賦給car類型的p存放 while(cs.top>i)stemp.s[++(stemp.top)]=cs.s[(cs.top)--];//出棧的元素?cái)?shù)組逐個(gè)賦給臨時(shí)棧 popstacknumber=p.number;//將這個(gè)車牌號(hào)信息傳給int popstacknumber()popstacktime=p.time;//將該車的時(shí)間信息傳給double popstacktime()cs.top--;//棧頂指針回到原來位置 while(stemp.top>=0)cs.s[++(cs.top)]=stemp.s[(stemp.top)--];//臨時(shí)棧出棧的元素逐個(gè)賦給原棧,完成先退再進(jìn)的工作 } int parkingmanagement::pushqueue(carqueue &cq,int cnum,double ctime)//入隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回隊(duì)內(nèi)位置 { car *p,*countp;int count(1);//count用于記錄車在過道上的位置信息,因隊(duì)列為鏈?zhǔn)降模赃M(jìn)行循環(huán)累加 p=new car;//創(chuàng)建一個(gè)car類型的指針 p->number=cnum;p->time=ctime;p->next=NULL;//首先將指向存放car類型元素的數(shù)組初始地址置空 if(cq.front==NULL)//第一次入隊(duì)要判斷頭結(jié)點(diǎn)是否為空 { cq.front=cq.rear=p;} else {//尾插法插入元素 p->next=(cq.rear)->next;(cq.rear)->next=p;cq.rear=(cq.rear)->next;} countp=(cq.front)->next;while(countp!=NULL){ count++;countp=countp->next;}//count即車在過道上的位置,【從1開始計(jì)!!】 return count;} int parkingmanagement::popqueue(carqueue &cq)//出隊(duì),隊(duì)內(nèi)進(jìn)行調(diào)整,返回汽車車牌號(hào) { car p;p.number=((cq.front)->next)->number;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的車牌號(hào)賦給car類型的車信息 p.time=((cq.front)->next)->time;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的時(shí)刻 //賦給car類型的車信息 p.next=((cq.front)->next)->next;//cq隊(duì)里,從cq.front開始指向下一個(gè)元素的指針 //賦給car類型的車信息的下一個(gè)元素的指針 return p.number;cq.front=(cq.front)->next;} void parkingmanagement::arrival(carstack &cs,carqueue &cq,int cnum,double ctime)//車輛到達(dá),根據(jù)輸入的車牌號(hào)、到達(dá)時(shí)間,變更函數(shù)參數(shù);并cout車位信息 { int pos;if(!(cs.full()))//如果棧未滿,車輛停入停車場(chǎng) { int fl(0),i;//定義一個(gè)從0開始的標(biāo)記fl for(i=0;i<=cs.top;i++){ if(cs.s[i].number==cnum)//如果到達(dá)的車的車牌號(hào)=棧內(nèi)已有車輛的車牌號(hào) { fl=1;//fl記1 break;} } if(fl==1)//如果到達(dá)的車的車牌號(hào)!=棧內(nèi)已有車輛的車牌號(hào) cout<<“輸入錯(cuò)誤!請(qǐng)重新輸入!”< cout<<“該停車場(chǎng)還有空位,請(qǐng)到”< { pos=pushqueue(cq,cnum,ctime);//入隊(duì),返回車位信息 cout<<“該停車場(chǎng)已滿,請(qǐng)將車停到便道”< { popstack(cs,cnum);//出棧操作 hour=ctime-popstacktime;//時(shí)間計(jì)算 outcarnum=popqueue(cq);//將便道上的第一輛車出隊(duì),入棧。并將其車牌號(hào)賦給outcarnum pstack=pushstack(cs,outcarnum,ctime);//將便道上的第一輛車,入棧 cout<<“該車在本停車場(chǎng)內(nèi)停留時(shí)間為”< { p=cq.front;while(p!=NULL){ count++;//如果在過道中找到該車,則該車的位置為過道中的第count位置(count從1開始)p=p->next;if(p->number==cnum)//在過道中找到要出去的車,則在隊(duì)列中刪除該car。//后面的車輛依然順序排列,補(bǔ)足空位 { deletequeue(cq,count);if(count>Max){ cout<<“您的車在便道上的位置為”< car *p,*q;int j(0);p=cq.front;while(p && j ######【3】【停車場(chǎng)管理系統(tǒng)【方案二 程序】】 (ps:本方案與方案一有同樣的問題,就是在對(duì) 便道上的車 進(jìn)行駛離操作時(shí),數(shù)據(jù)錯(cuò)誤,同樣的理由,沒有改正。如果有細(xì)心娃娃幫忙指點(diǎn)改正,在此感激啦~) *************************【以下為類定義】************************************ #include struct Node//過道停車的隊(duì)列所需鏈?zhǔn)浇Y(jié)點(diǎn) { T carnum;//定義車牌號(hào)類型 Node friend class carStack;public: T carnum;//車號(hào) int cartime;//停車時(shí)間 }; template int EnQueue(T cnum);//將元素x入隊(duì),并返回其在隊(duì)內(nèi)的位置(從1開始)T DeQueue();//將隊(duì)頭鏈?zhǔn)浇Y(jié)點(diǎn)出隊(duì),并返回汽車車牌號(hào) void deletequeue(int i);//將隊(duì)內(nèi)低i個(gè)元素刪除,即便道上i位置的汽車駛離 bool Empty();//判斷鏈隊(duì)列是否為空 Node int Popcar(T outcnum,int outctime);//將第cnum輛車出棧,并返回其停車時(shí)間(hour)bool full();//判斷棧是否為滿?滿則返回1 carinfo s=new Node front=rear=s;} else { rear->next=s;//將結(jié)點(diǎn)s插入到隊(duì)尾 rear=s;} p=front;while(p!=NULL){ i++;p=p->next;}//i即車在過道上的位置,【從1開始計(jì)!!】 return i;} template front=front->next;//將隊(duì)頭元素所在結(jié)點(diǎn)摘鏈 } return p->carnum;delete p;//將出隊(duì)進(jìn)棧的車從隊(duì)列里刪除 } template template :top(-1){//建立一個(gè)最大尺寸為size的空棧 S=new carinfo { cerr<<“動(dòng)態(tài)存儲(chǔ)失敗!”< template template void outputpark()//系統(tǒng)功能選擇頁面,輸入泊車信息 { cout<<“========================”< { cs.Pushcar(carnum,cartime);cout<<“請(qǐng)駛?cè)胪\噲?chǎng)的”< Node 第五篇:C++數(shù)據(jù)結(jié)構(gòu) 大作業(yè)課程設(shè)計(jì)