第一篇:火車(chē)票管理系統(tǒng)可行性報(bào)告(本站推薦)
火車(chē)票管理系統(tǒng)可行性報(bào)告
一.引言
學(xué)習(xí)《面向?qū)ο蟪绦蛟O(shè)計(jì)》課程必須重視實(shí)踐環(huán)節(jié),即通過(guò)C#結(jié)合實(shí)際需求開(kāi)發(fā)應(yīng)用程序。本次課程實(shí)習(xí)選擇使用C#開(kāi)發(fā)數(shù)據(jù)庫(kù)應(yīng)用程序,它能將所學(xué)的C#整合SQL Server數(shù)據(jù)庫(kù)知識(shí),形成與應(yīng)實(shí)際緊密結(jié)合的連貫整體,進(jìn)一步加深學(xué)生對(duì)C#基礎(chǔ)語(yǔ)法的理解,加強(qiáng)對(duì)WinForms編程的認(rèn)識(shí),提高應(yīng)用ADO.NET這一.NET中數(shù)據(jù)庫(kù)驅(qū)動(dòng)解決方案核心技術(shù)的能力,為將來(lái)的軟件設(shè)計(jì)工作打下一定的基礎(chǔ)。
該課程的實(shí)習(xí)主要是鍛煉學(xué)生的實(shí)際動(dòng)手與操作的能力,充分實(shí)現(xiàn)理論與實(shí)踐相結(jié)合,從而培養(yǎng)出優(yōu)秀的學(xué)生!
1.摘要
系統(tǒng)名稱(chēng): 火車(chē)票管理系統(tǒng)
系統(tǒng)功能: 實(shí)現(xiàn)管理員對(duì)系統(tǒng)的增刪改查等一系列的功能,讓客戶(hù)可以訂票、退票等,該系統(tǒng)只要實(shí)現(xiàn)簡(jiǎn)單的操作功能。
2.背景
揚(yáng)州環(huán)境資源職業(yè)技術(shù)學(xué)院1012網(wǎng)絡(luò)班小組成員在C#面向?qū)ο蟪绦蛟O(shè)計(jì)該課程的實(shí)訓(xùn)周內(nèi)進(jìn)行的課程實(shí)訓(xùn),借此提高學(xué)生的動(dòng)手能力,理論與實(shí)踐相結(jié)合的能力;該系統(tǒng)主要是在Visual Studio C# 2005的基礎(chǔ)上與SQL數(shù)據(jù)庫(kù)相結(jié)合而成的面向?qū)ο蟮某绦蛟O(shè)計(jì)系統(tǒng)。
二.系統(tǒng)開(kāi)發(fā)的背景、必要性及意義
1.現(xiàn)行系統(tǒng)調(diào)查研究
(1)組織機(jī)構(gòu):揚(yáng)州環(huán)境資源職業(yè)技術(shù)學(xué)院 1012網(wǎng)絡(luò)班;指導(dǎo)老師:陳彥(2)實(shí)訓(xùn)時(shí)間:2011年12月26日至2012年1月6日
(3)小組成員:徐濤平(組長(zhǎng))、,孫淑茵、孫垚垚、,夏盼盼、,柏銘慧、,華飛龍、,陳龍、,顧漢明
(4)成員任務(wù):徐濤平、,孫垚垚、,夏盼盼、,柏銘慧、,華飛龍、,陳龍、,顧漢明負(fù)責(zé)系統(tǒng)相關(guān)文檔的編寫(xiě);,柏銘慧負(fù)責(zé)前期的數(shù)據(jù)庫(kù)設(shè)計(jì);孫淑茵負(fù)責(zé)設(shè)計(jì)后期與系統(tǒng)相連接的數(shù)據(jù)庫(kù)DB的設(shè)計(jì),并負(fù)責(zé)系統(tǒng)的編碼編寫(xiě)。
(5)計(jì)算機(jī)應(yīng)用情況:臺(tái)式機(jī)裝有Visual Studio C# 2005和SQL數(shù)據(jù)庫(kù) 2.需求調(diào)查和分析
對(duì)于現(xiàn)在網(wǎng)絡(luò)的迅速發(fā)展,人們?cè)絹?lái)越關(guān)注網(wǎng)絡(luò)。人們?cè)诰W(wǎng)絡(luò)上進(jìn)行交易,購(gòu)物,訂餐等。在網(wǎng)上進(jìn)行訂票也越來(lái)越受人們的歡迎。鑒于這種情況,本人孫淑茵想要開(kāi)發(fā)一個(gè)類(lèi)似的系統(tǒng),故而有了現(xiàn)在的火車(chē)票管理系統(tǒng)。
該系統(tǒng)由于是本人的初次嘗試開(kāi)發(fā),所以功能比較的簡(jiǎn)單,還存在不足之處。
三.可行性分析
1.系統(tǒng)運(yùn)行可行性分析 該系統(tǒng)只需要一臺(tái)裝有Visual Studio C# 2005和SQL數(shù)據(jù)庫(kù)的的電腦就可以進(jìn)行運(yùn)行,對(duì)于企業(yè)來(lái)說(shuō),這是最簡(jiǎn)單的、最實(shí)用的系統(tǒng)了;對(duì)于人員來(lái)說(shuō),不需要花費(fèi)大量的金錢(qián)進(jìn)行人員的培訓(xùn),只需要招聘一個(gè)相關(guān)專(zhuān)業(yè)的計(jì)算機(jī)人員,就可以對(duì)系統(tǒng)進(jìn)行操作。2.技術(shù)可行性
火車(chē)票管理系統(tǒng)功能簡(jiǎn)單,對(duì)人員要求以及技術(shù)要求不高,在這方面,只需要一個(gè)計(jì)算機(jī)相關(guān)專(zhuān)業(yè)的人員就可以操作系統(tǒng),在技術(shù)上完全可以進(jìn)行。3.經(jīng)濟(jì)可行性
在經(jīng)濟(jì)上,不需要額外的費(fèi)用,只需要付費(fèi)開(kāi)發(fā)人員即可,可以說(shuō)是一勞永逸,在后期,不需要企業(yè)花費(fèi)費(fèi)用,只需要技術(shù)人員進(jìn)行定期的維護(hù)即可,在經(jīng)濟(jì)上完全可行。
四.系統(tǒng)功能簡(jiǎn)單介紹
1.數(shù)據(jù)庫(kù)
火車(chē)票管理系統(tǒng)連接的數(shù)據(jù)庫(kù)主要是SQL數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)的名稱(chēng)為DB.mdb,它包括了Stype表、Train表和UserInfo表三張表,由于時(shí)間匆忙,所以只有這三張表,進(jìn)而組成與系統(tǒng)相連接的數(shù)據(jù)庫(kù)。詳見(jiàn)下圖4.1
圖4.1 2.系統(tǒng)功能介紹
火車(chē)票管理系統(tǒng)功能比較簡(jiǎn)單,管理員可以對(duì)系統(tǒng)進(jìn)行增刪改查,而一般的瀏覽者就可以對(duì)系統(tǒng)進(jìn)行相應(yīng)的查票、訂票、退票操作,而不能像管理員那樣對(duì)系統(tǒng)進(jìn)行增刪改查等操作,從而保證了系統(tǒng)的安全性。下圖是系統(tǒng)的相關(guān)截圖,如圖4.2、4.3所示:
圖4.2
圖4.3 五.結(jié)論
在2011年12月26日至2012年1月6日實(shí)訓(xùn)期間,小組成員團(tuán)結(jié)協(xié)作,共同努力,完成了火車(chē)票管理系統(tǒng)的開(kāi)發(fā),在這個(gè)過(guò)程中每個(gè)成員的努力都市值得褒獎(jiǎng)的,尤其是負(fù)責(zé)代碼編寫(xiě)的孫淑茵為我們的系統(tǒng)完成與完善更是值得獎(jiǎng)勵(lì)的。
火車(chē)票管理系統(tǒng)功能簡(jiǎn)單,實(shí)現(xiàn)方便,但也耗費(fèi)了人力物力與心力,能在短時(shí)間內(nèi)開(kāi)發(fā)出這樣一個(gè)的系統(tǒng),我們的努力是值得肯定的,但是這個(gè)系統(tǒng)還存在著不足之處,有望在以后的日子里,對(duì)系統(tǒng)進(jìn)行改善和維護(hù)。
六.說(shuō)明
在這里,對(duì)相關(guān)的問(wèn)題做一些說(shuō)明:
1.我們是軟件技術(shù)基礎(chǔ)實(shí)訓(xùn)和C#課程實(shí)訓(xùn)前后進(jìn)行的,軟件技術(shù)基礎(chǔ)實(shí)訓(xùn)在前,分組也是在軟件技術(shù)基礎(chǔ)實(shí)訓(xùn)期間分的,相關(guān)的文檔也是在此期間完成的,代碼也是在此期間編寫(xiě)完成,只是比較不完善,而且在軟件技術(shù)基礎(chǔ)實(shí)訓(xùn)期間小組成員負(fù)責(zé)前期數(shù)據(jù)庫(kù)設(shè)計(jì)出的數(shù)據(jù)庫(kù)并不能用,都是中文,并且表與表之間沒(méi)有相關(guān)的聯(lián)系,所以負(fù)責(zé)代碼編寫(xiě)的孫淑茵就自己設(shè)計(jì)了一個(gè)數(shù)據(jù)庫(kù)DB。
2.在后來(lái)的C#實(shí)訓(xùn)期間,小組成員孫淑茵自己對(duì)軟件技術(shù)基礎(chǔ)實(shí)訓(xùn)期間不完善的火車(chē)票管理系統(tǒng)進(jìn)行了改進(jìn),在陳彥老師的指導(dǎo)下,才有了后來(lái)的完善的火車(chē)票管理系統(tǒng),可以說(shuō)這個(gè)火車(chē)票管理系統(tǒng)是孫淑茵同學(xué)的私有產(chǎn)物,與小組其他成員關(guān)系不大,在此說(shuō)明一下。
第二篇:火車(chē)票管理系統(tǒng)
火車(chē)票管理系統(tǒng)一、課題內(nèi)容和要求
改系統(tǒng)要求實(shí)現(xiàn)一個(gè)簡(jiǎn)單、實(shí)用的火車(chē)票管理程序,主要功能包括火車(chē)票數(shù)據(jù)的錄入、查找、刪除、顯示、售票、退票等。所有火車(chē)票數(shù)據(jù)都要利用文件系統(tǒng)保存,以備系統(tǒng)下次運(yùn)行時(shí)使用。通過(guò)此課題,熟練掌握文件、數(shù)組、指針的各種操作,以及一些基本算法思想的應(yīng)用。
二、需求分析
功能框架圖:(見(jiàn)圖2-1)
火車(chē)票管理系統(tǒng)
錄入
查找
刪除
排序
售票
退票
保存
圖2-1。
1.新增火車(chē)票數(shù)據(jù)記錄:預(yù)先建立一個(gè)txt文檔,存入數(shù)據(jù),然后在程序中讀取文檔。
2.查找火車(chē)票數(shù)據(jù)(可按車(chē)次,發(fā)車(chē)時(shí)間、起點(diǎn)站、終點(diǎn)站等查找)。
3.刪除火車(chē)票數(shù)據(jù)記錄(先查找,再刪除。若查找出多條記錄,則進(jìn)一步提示用戶(hù)選擇記錄的車(chē)次,再刪除)。
4.對(duì)火車(chē)票排序(可按車(chē)次、發(fā)車(chē)時(shí)間、起點(diǎn)站、終點(diǎn)站等排序。)。
5.顯示當(dāng)前所有火車(chē)票信息列表。
6.售票(先查找,當(dāng)確定車(chē)次后,根據(jù)售票張數(shù)對(duì)該車(chē)次的已售票人數(shù)進(jìn)行修改)。
7.退票(售票的逆處理,過(guò)程與售票類(lèi)似)。
8.保存火車(chē)票數(shù)據(jù)到文件中。
9.從文件中讀入火車(chē)票數(shù)據(jù)。
三、概要設(shè)計(jì)
1)主要結(jié)構(gòu)體:
struct
time
{
int
hour;
int
minutes;
};
struct
ticket
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
2)主要函數(shù)流程圖:
l
載入函數(shù):用于從文本中載入信息。(見(jiàn)圖3-1)
打開(kāi)文本
能否打開(kāi)
讀入數(shù)據(jù)
是否結(jié)束
結(jié)束
否
否
開(kāi)始
開(kāi)始
否
是
是
讀入車(chē)次
是否符合輸出信息
結(jié)束
是
圖3-2
圖3-1
l
查找函數(shù):利用輸入的車(chē)次或站點(diǎn)進(jìn)行順序查找并將找到的信息輸出。(見(jiàn)圖3-2)
l
刪除函數(shù):先查找出要?jiǎng)h除的信息再刪除。(見(jiàn)圖3-3)
否
否
是
無(wú)法訂票
人數(shù)加一
是否超載
否
圖3-4
結(jié)束
開(kāi)始
讀入車(chē)次
是否誤點(diǎn)
否
圖3-3
是
是
否
是否符合讀入車(chē)次
開(kāi)始
記錄下標(biāo)i
i=i+1,i++
i<車(chē)次總數(shù)-1
結(jié)束
l
售票退票函數(shù):先判斷該車(chē)是否已發(fā)車(chē),若未發(fā)車(chē)且人未滿(mǎn)則訂票成功,否則無(wú)法訂票退票。(見(jiàn)圖3-4)
l
備份文件函數(shù):將文件內(nèi)容存儲(chǔ)到用戶(hù)給定的地址中(見(jiàn)圖3—5)
圖3-5
l
排序函數(shù)(見(jiàn)圖3-6)
圖3-6
四、源程序代碼
#include
#include
#include
#include
#include
#include
const
int
MAX=20;
const
int
N=50;
const
int
MAXFILENAME=100;
enum
{FALSE,TRUE};
struct
time
{
int
hour;
int
minutes;
};
struct
ticket
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
int
RecordNumber;
int
FLAG=FALSE;
/**********************************************/
int
ShowMessage(void);
//載入原始數(shù)據(jù)
void
mainmenu(void);
//主菜單
void
InsertMessage(void);
//錄入班次信息
void
SearchMenu(void);
//查詢(xún)路線子菜單
void
SearchByNumber(void);
//按班次號(hào)查詢(xún)
void
SearchByAddress(void);
//按終點(diǎn)站查詢(xún)
void
cancle(void);//刪除數(shù)據(jù)
void
selection(ticket
*pa,int
n);//排序
void
TicketManagement(void);
//車(chē)票售出與退回
void
TicketOrder(void);
//售票
void
TicketDelete(void);
//退票
void
exit(void);
//退出該系統(tǒng)
void
SaveRecord(ticket
x);
//儲(chǔ)存信息到文件中
/********************************************/
int
main(void)
{
do{
mainmenu();
}while(FLAG==FALSE);
return
0;
}
void
mainmenu(void)
{
system(“mode
con:
cols=140
lines=130“);
char
functionNumber;
printf(“
火車(chē)票管理系統(tǒng)\n\n“);
printf(“============================================================================\n“);
printf(“
1.錄入班次信息\t\n“);
printf(“
2.顯示所有車(chē)票信息列表\t\n“);
printf(“
3.查詢(xún)火車(chē)票數(shù)據(jù)\t\n“);
printf(“
4.刪除火車(chē)票數(shù)據(jù)記錄\t\n“);
printf(“
5.按行車(chē)時(shí)間排序\t\n“);
printf(“
6.售票與退票系統(tǒng)\t\n“);
printf(“
7.退出該系統(tǒng)\t\n“);
printf(“============================================================================\n“);
printf(“請(qǐng)選擇你所需要的功能:“);
scanf(“%c“,&functionNumber);
switch(functionNumber)
{
case
'1':
{
InsertMessage();
printf(“\n按任意鍵回主菜單......\n“);
getchar();
getchar();
}
break;
case
'2':
{
RecordNumber=ShowMessage();
printf(“\n按任意鍵回主菜單......\n“);
getchar();
getchar();
}
break;
case
'3':
{
SearchMenu();
printf(“\n按任意鍵回主菜單......\n“);
getchar();
getchar();
}
break;
case
'4':
{
cancle();
printf(“\n按任意鍵回主菜單......\n“);
getchar();
getchar();
}
break;
case
'5':
{
selection(train,RecordNumber);
printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“);
int
i;
for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } printf(“\n按任意鍵回主菜單......\n“); getchar(); getchar(); } break; case '6': { TicketManagement(); getchar(); getchar(); } break; case '7': { int i; FLAG=TRUE; for(i=0;i { SaveRecord(*(train+i)); } exit(); } break; default: { printf(“輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--7.\n“); printf(“按任意鍵回主菜單......\n“); getchar(); getchar(); } }//switch ends FLAG=FALSE; } void InsertMessage(void) { FILE *fp; char filename[MAXFILENAME]; int i; printf(“請(qǐng)輸入文件名或者文件路徑名:“); scanf(“%s“,filename); if((fp=fopen(filename,“r“))==NULL) { printf(“文件%s不可讀,請(qǐng)確認(rèn)文件%s存在或者文件路徑正確.\n\n“,filename,filename); mainmenu(); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } RecordNumber=i; /*******************************輸出更新后的訂票記錄************************************************************/ printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } fclose(fp); } int ShowMessage(void) { int i; FILE *fp; if((fp=fopen(“add.txt“,“r“))==NULL) { printf(“讀取數(shù)據(jù)失敗,請(qǐng)檢查文件add.txt是否存在.\n“); exit(-1); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%d%d“,&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes); fscanf(fp,“%s%s%f%d%d“,&train[i].DeparturePoint,&train[i].TerminalPoint,&train[i].LastTime,&train[i].FixNumber,&train[i].FixedNumber); } int count=i; printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\t“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); printf(“\n“); } return count; } void SearchMenu(void) { system(“mode con: cols=140 lines=130“); char functionNumber; printf(“ 查詢(xún)子菜單\n“); printf(“============================================================================\n“); printf(“ 1.按班次號(hào)查詢(xún)\t\n“); printf(“ 2.按終點(diǎn)站查詢(xún)\t\n“); printf(“ 3.返回主菜單\t\n“); printf(“============================================================================\n“); printf(“請(qǐng)選擇你所需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1':SearchByNumber();break; case '2':SearchByAddress();break; case '3': getchar(); mainmenu(); break; default: printf(“輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n“); printf(“按任意鍵回查詢(xún)子菜單......\n“); getchar(); getchar(); SearchMenu(); } } void SearchByNumber(void) { int i; char Number[MAX]; printf(“請(qǐng)輸入班次號(hào):“); scanf(“%s“,&Number); printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { //對(duì)比終點(diǎn)站記錄,找到并輸出 if((strcmp(Number,train[i].SerialNumber))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void SearchByAddress(void) { int i; char Address[MAX]; printf(“請(qǐng)輸入終點(diǎn)站的名稱(chēng):“); scanf(“%s“,&Address); printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); for(i=0;i { //對(duì)比終點(diǎn)站記錄,找到并輸出 if((strcmp(Address,train[i].TerminalPoint))==0) { printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } } } void cancle(void) { SearchMenu(); int i,j; char m[MAX]; printf(“請(qǐng)輸入要?jiǎng)h除的班次:“); scanf(“%s“,&m); for(i=0;i { if(i==RecordNumber) { printf(“對(duì)不起,沒(méi)有這趟車(chē)\n“); } } for(j=i;j { train[j]=train[j+1]; } printf(“刪除成功\n“); } void selection(ticket *pa,int n) { int i,k,index; struct ticket temp; for(k=0;k { index=k; for(i=k+1;i if(pa[i].LastTime index=i; if(index!=k) { temp=pa[index]; pa[index]=pa[k]; pa[k]=temp; } } } void TicketManagement(void) { char functionNumber; system(“mode con: cols=140 lines=130“); printf(“ 訂票與退票菜單\n“); printf(“============================================================================\n“); printf(“ 1.訂票\t\n“); printf(“ 2.退票\t\n“); printf(“ 3.返回主菜單.\n“); printf(“============================================================================\n“); printf(“選擇你需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1': { TicketOrder(); //getchar(); //getchar(); } break; case '2':TicketDelete();break; case '3': { getchar(); mainmenu(); } break; default: { printf(“輸入錯(cuò)誤,請(qǐng)確保你的輸入為1--3.\n“); printf(“按任意鍵回主菜單......\n“); getchar(); getchar(); mainmenu(); } } } void TicketOrder(void) { SearchMenu(); int i,j; char a[MAX]; printf(“請(qǐng)輸入要訂購(gòu)的車(chē)票的班次:“); scanf(“%s“,&a); printf(“請(qǐng)輸入要訂購(gòu)的車(chē)票的張數(shù):“); scanf(“%d“,&j); for(i=0;i { if((strcmp(a,train[i].SerialNumber))==0) { if(train[i].FixedNumber { (train[i].FixedNumber)+=j; printf(“你的訂票成功,請(qǐng)按時(shí)上車(chē),謝謝使用!\n“); printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“對(duì)不起,票已賣(mài)完\n“); } } } void TicketDelete(void) { SearchMenu(); int i,j; char b[MAX]; printf(“請(qǐng)輸入要退購(gòu)的車(chē)票的班次:“); scanf(“%s“,&b); printf(“請(qǐng)輸入要退購(gòu)的車(chē)票的張數(shù):“); scanf(“%d“,&j); for(i=0;i { if((strcmp(b,train[i].SerialNumber))==0) { if(train[i].FixedNumber>=1) { train[i].FixedNumber-=j; printf(“退訂車(chē)票成功,謝謝使用!\n“); printf(“班次\t發(fā)車(chē)時(shí)間\t起點(diǎn)\t終點(diǎn)\t行車(chē)時(shí)間(小時(shí))\t額定載量\t已定票人數(shù)\n“); printf(“%s\t%d:%d\t\t“,train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes); printf(“%s\t%s\t\t%.1f\t %d\t\t%d\n“,train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].FixNumber,train[i].FixedNumber); } else printf(“對(duì)不起,今天的這趟車(chē)的票尚未賣(mài)出,無(wú)法完成退票!\n“); } } } void exit(void) { printf(“\n\n*********************謝謝使用本系統(tǒng),歡迎下次繼續(xù)使用***********************\n“); exit(0); } void SaveRecord(ticket x) { FILE *fp; if((fp=fopen(“add.txt“,“a“))==NULL) { printf(“打開(kāi)文件%s失敗\n“,“add.txt“); exit(-1); } fprintf(fp,“\n%s\t%d\t%d\t\t“,x.SerialNumber,x.SetOut.hour,x.SetOut.minutes); fprintf(fp,“%s\t%s\t\t%.1f\t %d\t\t%d“,x.DeparturePoint,x.TerminalPoint,x.LastTime,x.FixNumber,x.FixedNumber); } 五、測(cè)試數(shù)據(jù)及其結(jié)果分析 顯示的主菜單界面: 火車(chē)票管理系統(tǒng) ============================================================================ 1.錄入班次信息 2.顯示所有車(chē)票信息列表 3.查詢(xún)火車(chē)票數(shù)據(jù) 4.刪除火車(chē)票數(shù)據(jù)記錄 5.按行車(chē)時(shí)間排序 6.售票與退票系統(tǒng) 7.退出該系統(tǒng) ============================================================================ 請(qǐng)選擇你所需要的功能: 1)錄入班次信息 輸入:1 輸出:請(qǐng)輸入文件名或者文件路徑名: 輸入:D:\\1.txt 輸出: 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 蘇州 2.0 200 t2222 12:40 長(zhǎng)沙 上海 9.0 250 k2323 13:50 揚(yáng)州 南京 1.5 200 k1122 9:20 廣州 南京 20.0 300 170 按任意鍵回主菜單......2)顯示所有車(chē)票信息列表 輸入:2 輸出: 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 蘇州 2.0 200 t2222 12:40 長(zhǎng)沙 上海 9.0 250 k2323 13:50 揚(yáng)州 南京 1.5 200 k1122 9:20 廣州 南京 20.0 300 170 按任意鍵回主菜單......3)查詢(xún)火車(chē)票記錄 輸入:3 輸出: 查詢(xún)子菜單 ============================================================================ 1.按班次號(hào)查詢(xún) 2.按終點(diǎn)站查詢(xún) 3.返回主菜單 ============================================================================ 請(qǐng)選擇你所需要的功能: 輸入:1 輸出:請(qǐng)輸入班次號(hào): 輸入:k1111 輸出: 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 按任意鍵回主菜單......輸入:2 輸出:請(qǐng)輸入終點(diǎn)站的名稱(chēng): 輸入:上海 輸出: 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 長(zhǎng)沙 上海 9.0 250 按任意鍵回主菜單......4)刪除火車(chē)票數(shù)據(jù) 輸入:4 輸出:查詢(xún)子菜單 ============================================================================ 1.按班次號(hào)查詢(xún) 2.按終點(diǎn)站查詢(xún) 3.返回主菜單 ============================================================================ 請(qǐng)選擇你所需要的功能: (查找過(guò)程同上) 輸出:請(qǐng)輸入要?jiǎng)h除的班次: 輸入:t2222 輸出:刪除成功 按任意鍵回主菜單......5)按行車(chē)時(shí)間排序: 輸入:5 輸出: 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k2323 13:50 揚(yáng)州 南京 1.5 200 k1234 10:20 上海 蘇州 2.0 200 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 長(zhǎng)沙 上海 9.0 250 k1122 9:20 廣州 南京 20.0 300 170 按任意鍵回主菜單......6)售票 輸入:6 輸出: 訂票與退票菜單 =================================================== 1.訂票 2.退票 3.返回主菜單 ================================================== 選擇你需要的功能: 輸入:1 輸出: 查詢(xún)子菜單 ======================================================================== 1.按班次號(hào)查詢(xún) 2.按終點(diǎn)站查詢(xún) 3.返回主菜單 ========================================================================= 請(qǐng)選擇你所需要的功能: (查詢(xún)過(guò)程同上) 輸出:請(qǐng)輸入需要訂購(gòu)的車(chē)票班次 輸入:k1111 輸出:請(qǐng)輸入要訂購(gòu)的車(chē)票張數(shù) 輸入:10 輸出: 您的訂票成功,請(qǐng)按時(shí)上車(chē),謝謝使用! 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 210 7)退票 輸入:6 輸出: 訂票與退票菜單 =================================================== 1.訂票 2.退票 3.返回主菜單 ================================================== 選擇你需要的功能: 輸入:2 輸出: 查詢(xún)子菜單 ======================================================================== 1.按班次號(hào)查詢(xún) 2.按終點(diǎn)站查詢(xún) 3.返回主菜單 ========================================================================= 請(qǐng)選擇你所需要的功能: (查詢(xún)過(guò)程同上) 輸出:請(qǐng)輸入需要退購(gòu)的車(chē)票班次 輸入:k1111 輸出:請(qǐng)輸入要訂購(gòu)的車(chē)票張數(shù) 輸入:5 退訂車(chē)票成功,謝謝使用! 班次 發(fā)車(chē)時(shí)間 起點(diǎn) 終點(diǎn) 行車(chē)時(shí)間(小時(shí)) 額定載量 已定票人數(shù) k1111 8:30 南京 上海 4.0 300 195 8)退出 輸入:7 輸出:****************謝謝使用本系統(tǒng),歡迎下次繼續(xù)使用**************** 結(jié)果分析:(1).若輸入數(shù)字不在1——7之間,則會(huì)提示錯(cuò)誤。 (2).當(dāng)輸入列車(chē)班次信息不正確時(shí),將不會(huì)得到結(jié)果。 (3).文件錄入不正確時(shí),將不會(huì)得到任何結(jié)果。 六、調(diào)試過(guò)程中的問(wèn)題 1)文件存儲(chǔ)方式不正確:應(yīng)先定義一個(gè)文件存儲(chǔ)函數(shù),在其它函數(shù)中調(diào)用,方便有效。 2)刪除時(shí)若遇到?jīng)]有的班次則程序出錯(cuò)。應(yīng)在不存在輸入的列車(chē)班次時(shí),輸出不存在的提示 3)保存后在下次運(yùn)行時(shí)出錯(cuò)問(wèn)題:在保存信息時(shí),應(yīng)在每個(gè)信息之間加一空格來(lái)保存,否則在文件下次使用時(shí)讀取就會(huì)沒(méi)有分界點(diǎn)。 4)訂票退票只能一次一張。應(yīng)在用戶(hù)輸入列車(chē)班次后讓用戶(hù)輸入需要訂購(gòu)的張數(shù)。 5)結(jié)構(gòu)指針定義錯(cuò)誤,ticket前不應(yīng)加struct。 摘要 隨著時(shí)代的發(fā)展,計(jì)算系軟件和系統(tǒng)的成熟,火車(chē)票的正當(dāng)管理成為一個(gè)影響鐵路部門(mén)正常運(yùn)營(yíng)的因素之一,而建立火車(chē)票訂票管理系統(tǒng)是一個(gè)很好的解決辦法。作為計(jì)算機(jī)應(yīng)用的一部分,使用計(jì)算機(jī)對(duì)火車(chē)票信息進(jìn)行管理,具有手工管理所無(wú)法比擬的優(yōu)點(diǎn),例如檢索迅速、查找方便、可靠性高、存儲(chǔ)量大、保密性好等,這些優(yōu)點(diǎn)能夠極大的提高火車(chē)票信息管理的效率,也正體現(xiàn)了火車(chē)票的科學(xué)化正規(guī)化管理 現(xiàn)在隨著社會(huì)的發(fā)展,數(shù)據(jù)量急劇增長(zhǎng),現(xiàn)在人們就借助計(jì)算機(jī)和數(shù)據(jù)庫(kù)技術(shù)科學(xué)的保存大量的數(shù)據(jù),以便能更好的利用這些數(shù)據(jù)資源。本論文就是通過(guò)MFC的整體設(shè)計(jì)把數(shù)據(jù)庫(kù)與應(yīng)用程序相連接,做成一個(gè)火車(chē)票的訂票管理系統(tǒng),使得火車(chē)票管理員能夠有效的管理車(chē)次信息、旅客信息、退票信息等。同時(shí)用戶(hù)可以通過(guò)查詢(xún)到相關(guān)的火車(chē)票信息,選擇是否適合自己,也可以在網(wǎng)上直接訂票、退票,省時(shí)省力。 關(guān)鍵字: SQL2000,MFC,數(shù)據(jù)庫(kù)設(shè)計(jì),火車(chē)票訂票系統(tǒng) 目錄 第一章概述 1.1項(xiàng)目開(kāi)發(fā)背景 1.2系統(tǒng)開(kāi)發(fā)目的 1.3技術(shù)可行性研究 第二章開(kāi)發(fā)平臺(tái)介紹 2.1 系統(tǒng)的架構(gòu) 2.2系統(tǒng)運(yùn)行環(huán)境操作系統(tǒng) 2.3系統(tǒng)開(kāi)發(fā)環(huán)境 2.4開(kāi)發(fā)工具 第三章數(shù)據(jù)庫(kù)設(shè)計(jì) 3.1系統(tǒng)詳細(xì)調(diào)查 3.2數(shù)據(jù)流圖 3.3數(shù)據(jù)庫(kù)設(shè)計(jì) 第四章系統(tǒng)的界面設(shè)計(jì) 4.1主窗口界面 4.2旅客信息窗口 4.3車(chē)次信息窗口 4.4取票及退票窗口 第五章系統(tǒng)的實(shí)現(xiàn) 總結(jié)與展望 致謝 參考文獻(xiàn) 需求分析 需求分析的任務(wù) 調(diào)查機(jī)票預(yù)定系統(tǒng)應(yīng)用領(lǐng)域涉及的內(nèi)容,對(duì)涉及到領(lǐng)域的各個(gè)應(yīng)用的信息要求和操作要求進(jìn)行詳細(xì)分析,形成需求分析說(shuō)明書(shū)。最重要的是調(diào)查、收集信息、分析購(gòu)票人信息和火車(chē)預(yù)定流程。處理要求、數(shù)據(jù)的安全性與完整性要求。 要求系統(tǒng)能有效、快速、安全、可靠和無(wú)誤的完成上述操作。并要求客戶(hù)機(jī)的界面要簡(jiǎn)單明了,易于操作,服務(wù)器程序利于維護(hù)。需求分析的過(guò)程 火車(chē)站為方便旅客,需開(kāi)發(fā)一個(gè)火車(chē)票預(yù)定系統(tǒng)。為便于旅客由網(wǎng)上定票,把預(yù)定火車(chē)票的旅客信息,包括姓名、性別、工作單位、身份證號(hào)碼、出發(fā)時(shí)間、目的地,輸入火車(chē)票訂票系統(tǒng)的客戶(hù)端程序,系統(tǒng)經(jīng)過(guò)查詢(xún)火車(chē)站內(nèi)的列車(chē)車(chē)次數(shù)據(jù)服務(wù)器后,為旅客安排列車(chē),印出取票通知。旅客在火車(chē)出發(fā)前一天憑取票通知和帳單交款后取票,系統(tǒng)校對(duì)無(wú)誤后即印出火車(chē)票給旅客。如果某方面出現(xiàn)問(wèn)題,旅客可以持有效證件去火車(chē)站退票。 要求系統(tǒng)能有效、快速、安全、可靠和無(wú)誤的完成上述操作。并要求客戶(hù)機(jī)的界面要簡(jiǎn)單明了,易于操作,服務(wù)器程序便于維護(hù)。數(shù)據(jù)字典與流程圖 經(jīng)過(guò)可行性分析和初步需求調(diào)查,抽象出該系統(tǒng)業(yè)務(wù)流程圖,結(jié)合該實(shí)例具體情況,給出旅客信息、訂票信息和取票通知的具體需求。 圖2.1 旅客購(gòu)票流程圖 ⑴調(diào)查用戶(hù)需求 ①售票處需求 功能:旅客持個(gè)人證件去火車(chē)站購(gòu)買(mǎi)火車(chē)票。希望能通過(guò)旅客姓名查到該旅客的列車(chē)車(chē)次并記錄旅客基本信息。統(tǒng)計(jì)功能: 按火車(chē)票統(tǒng)計(jì)買(mǎi)票人數(shù) 按姓名統(tǒng)計(jì)火車(chē)票數(shù) ②旅客購(gòu)票需求 交費(fèi)功能: 交費(fèi) 退費(fèi) ③取票需求 通知功能: 通知旅客取票 統(tǒng)計(jì)功能: 統(tǒng)計(jì)通過(guò)驗(yàn)證的人數(shù) 統(tǒng)計(jì)可以取票的人 統(tǒng)計(jì)未通過(guò)驗(yàn)證的人數(shù) 查詢(xún)功能: 購(gòu)票旅客查詢(xún) 購(gòu)票旅客姓名 購(gòu)票旅客身份證號(hào) 購(gòu)票旅客訂單號(hào) ④列車(chē)車(chē)次信息需求 查詢(xún)功能: 車(chē)次 始發(fā)站 終點(diǎn)站 始發(fā)時(shí)間 系統(tǒng)框架 在調(diào)查完了用戶(hù)需求之后,就要開(kāi)始分析用戶(hù)需求。在此,我們們采用自頂向下的結(jié)構(gòu)化分析方法(SA方法)。首先,定義全局概念結(jié)構(gòu)的框架,如圖2.2所示。 圖2.2火車(chē)票預(yù)定系統(tǒng)總框架圖 各子系統(tǒng)需要進(jìn)一步細(xì)化。旅客信息系統(tǒng)為例進(jìn)一步細(xì)化,如圖2.3所示。 圖2.3旅客信息系統(tǒng)細(xì)化 以其中的查詢(xún)旅客信息功能為例進(jìn)一步細(xì)化,如圖2.4所示。 圖2.4查詢(xún)旅客信息功能 圖2.5列車(chē)車(chē)次信息系統(tǒng)細(xì)化 圖2.6取票通知系統(tǒng)細(xì)化 圖2.7旅客信息系統(tǒng)能查詢(xún)到的內(nèi)容 圖2.8火車(chē)票信息系統(tǒng)能查詢(xún)到的內(nèi)容 圖2.9退票信息系統(tǒng)細(xì)化 將所有子系統(tǒng)全部細(xì)化。將所有用戶(hù)需求分析完畢之后,就要開(kāi)始構(gòu)造數(shù)據(jù)字典了。經(jīng)分析之后,本系統(tǒng)要用到五個(gè)基本表:退票信息表,旅客信息表,列車(chē)車(chē)次信息表,取票通知信息系統(tǒng),列車(chē)座位信息表。數(shù)據(jù)結(jié)構(gòu)定義如表2.1所示。表2.1 數(shù)據(jù)結(jié)構(gòu)定義 數(shù)據(jù)結(jié)構(gòu)名 含義說(shuō)明 組成退票信息 定義了退票旅客的有關(guān)信息 旅客姓名,身份證號(hào),訂單號(hào),電話號(hào) 旅客 定義了旅客有關(guān)信息 旅客姓名,身份證號(hào),性別,工作單位,電話號(hào) 列車(chē)車(chē)次信息表 定義了車(chē)次 的有關(guān)信息 車(chē)次號(hào),始發(fā)地,目的地,始發(fā)時(shí)間 取票通知單 定義了取票通知相關(guān)有關(guān)信息 旅客姓名,取票時(shí)間,列車(chē)車(chē)次,座位號(hào),火車(chē)票類(lèi)型 列車(chē)座位信息表 定義了列車(chē)座位有關(guān)信息 列車(chē)號(hào),座位號(hào),座位信息,火車(chē)票類(lèi)型 概念結(jié)構(gòu)設(shè)計(jì) 概念結(jié)構(gòu)設(shè)計(jì)的方法與步驟 概念結(jié)構(gòu)設(shè)計(jì)的方法 概念設(shè)計(jì)階段我們采用自底向上的方法,即自頂向下的進(jìn)行需求分析,然后再自底向上的進(jìn)行概念結(jié)構(gòu)設(shè)計(jì)。對(duì)已經(jīng)細(xì)化到無(wú)法再分的階段逐步集成在一起,最終合成一個(gè)全局概念模式。 概念結(jié)構(gòu)設(shè)計(jì)的步驟 第一步是進(jìn)行局部視圖的設(shè)計(jì):由于高層的數(shù)據(jù)流圖只能反映系統(tǒng)的概貌,而中層流圖能較好的反映系統(tǒng)中各局部應(yīng)用的子系統(tǒng)組成。因此我們們先逐一的設(shè)計(jì)分E-R圖。 第二步是進(jìn)行視圖的集成:各子系統(tǒng)的E-R圖設(shè)計(jì)好之后,下一步就是要將所有的分E-R圖合成一個(gè)系統(tǒng)的總E-R圖,一般有兩個(gè)方式,多個(gè)分E-R圖一次集成,另一種是一次集成兩個(gè)分E-R圖。我們想采用一次集成兩個(gè)分E-R圖的方式。數(shù)據(jù)抽象與局部視圖設(shè)計(jì) 按照?qǐng)D2.2機(jī)票預(yù)定系統(tǒng)總框架圖,設(shè)計(jì)實(shí)體屬性圖以及局部E-R圖。 圖3.1退票信息系統(tǒng) 圖3.2旅客信息系統(tǒng) ……圖3.3列車(chē)車(chē)次信息 圖3.4取票通知信息 圖3.5列車(chē)座位信息表 圖3.6旅客購(gòu)票局部E-R 視圖的集成 經(jīng)過(guò)逐步細(xì)化再進(jìn)行每?jī)蓚€(gè)一集成初步形成一個(gè)E-R圖,最后得到圖3.4總體概念結(jié)構(gòu)E-R圖 圖3.4系統(tǒng)總體結(jié)構(gòu)E-R圖 邏輯結(jié)構(gòu)設(shè)計(jì) E-R圖向關(guān)系模型的轉(zhuǎn)換 將圖3.4總體概念結(jié)構(gòu)E-R圖轉(zhuǎn)化成關(guān)系模型。退票信息(訂單號(hào),旅客姓名,電話號(hào),身份證號(hào)) 旅客(旅客姓名,身份證號(hào),電話號(hào),性別,工作單位)車(chē)次信息表(車(chē)次號(hào),始發(fā)站,終點(diǎn)站,始發(fā)時(shí)間) 取票通知單(旅客姓名,取票時(shí)間,車(chē)次號(hào),座位號(hào),車(chē)票類(lèi)型)列車(chē)座位信息表(座位號(hào),車(chē)次號(hào),座位信息,車(chē)票類(lèi)型)數(shù)據(jù)模型的優(yōu)化 將轉(zhuǎn)化的關(guān)系模式進(jìn)行優(yōu)化,最終達(dá)到第三范式。 1、確定數(shù)據(jù)依賴(lài) 退票信息(訂單號(hào),旅客姓名,電話號(hào),身份證號(hào))根據(jù)這個(gè)關(guān)系寫(xiě)出數(shù)據(jù)依賴(lài) 訂單號(hào)→旅客姓名,訂單號(hào)→電話號(hào),訂單號(hào)→身份證號(hào) 旅客(旅客姓名,身份證號(hào),電話號(hào),性別,工作單位)旅客姓名→身份證號(hào),旅客姓名→電話號(hào),旅客姓名→性別,旅客姓名→工作單位 車(chē)次信息表(車(chē)次號(hào),始發(fā)地,目的地,始發(fā)時(shí)間)列車(chē)車(chē)次→始發(fā)站,列車(chē)車(chē)次→終點(diǎn)站,車(chē)次→始發(fā)時(shí)間 取票通知單(旅客姓名,取票時(shí)間,車(chē)次號(hào),座位號(hào),機(jī)票類(lèi)型)旅客姓名→取票時(shí)間,旅客姓名→車(chē)次號(hào),旅客姓名→座位號(hào),旅客姓名→車(chē)票類(lèi)型 火車(chē)座位信息表(座位號(hào),車(chē)次號(hào),座位信息,車(chē)票類(lèi)型)(座位號(hào),車(chē)次號(hào))→座位信息,(座位號(hào),車(chē)次號(hào),座位信息)→車(chē)票類(lèi)型 對(duì)各關(guān)系模式間數(shù)據(jù)依賴(lài)進(jìn)行極小化處理,消除冗余 訂單號(hào)→旅客姓名,訂單號(hào)→電話號(hào),訂單號(hào)→身份證號(hào),旅客姓名→性別 旅客姓名→工作單位,旅客姓名→取票時(shí)間,旅客姓名→車(chē)次號(hào) 旅客姓名→座位號(hào),旅客姓名→車(chē)票類(lèi)型,車(chē)次號(hào)→始發(fā)站,列車(chē)號(hào)→終點(diǎn)站 車(chē)次號(hào)→始發(fā)時(shí)間,(座位號(hào),車(chē)次號(hào))→座位信息 看這些模式是否符合要求,確定是否要對(duì)某些模式進(jìn)行合并或者分解 最終分解成第三范式: (訂單號(hào),電話號(hào),身份證號(hào))(訂單號(hào),旅客姓名)(旅客姓名,取票時(shí)間,性別,工作單位,車(chē)票類(lèi)型)(旅客姓名,車(chē)次號(hào))(旅客姓名,座位號(hào))(車(chē)次號(hào),座位號(hào),車(chē)票類(lèi)型)(車(chē)次號(hào),始發(fā)站,終點(diǎn)站,始發(fā)時(shí)間) 學(xué)生公寓管理系統(tǒng)可行性報(bào)告 一.引言 摘要 隨著電腦的普及與使用,現(xiàn)在的管理也提升了一個(gè)檔次,漸漸實(shí)現(xiàn)了無(wú)紙化辦公,即從原來(lái)的人工記錄管理模式轉(zhuǎn)變?yōu)殡娔X一體化管理。高校是科研的陣地,后勤的公寓管理也應(yīng)該一改傳統(tǒng)的人工管理,更加信息化,時(shí)代化,節(jié)省人力物力,提高效率。基于這一點(diǎn),開(kāi)發(fā)此學(xué)生公寓管理軟件。 學(xué)生公寓管理軟件,是以高校的管理方式為實(shí)例而設(shè)計(jì)的一種實(shí)用型管理系統(tǒng)。本系統(tǒng)最大的特點(diǎn)是通用性、簡(jiǎn)單操作性,適用于同行業(yè)以及一些同類(lèi)型的企業(yè)管理。隨著學(xué)校寄宿人員的增多,公寓管理人員的負(fù)擔(dān)越來(lái)越重,為了讓所有公寓管理人員能從繁重的工作中解脫出來(lái),實(shí)現(xiàn)無(wú)紙化辦公;使工作更有條理,更方便,更有效率而開(kāi)發(fā)出這套公寓管理軟件。 軟件從對(duì)學(xué)生的分房開(kāi)始到最后的公寓管理全部電腦化。它主要包括:公寓、寢室的配置、住宿人員登記、衛(wèi)生檢查、公寓資產(chǎn)、值班老師記錄以及對(duì)學(xué)生住宿情況查詢(xún),可以更快地了解到每個(gè)學(xué)生的住宿情況,使公寓的管理效率更高,做的更好! 背景 名稱(chēng):學(xué)生公寓管理系統(tǒng)。 本項(xiàng)目的任務(wù)提出者:鄭州航院信息統(tǒng)計(jì)職業(yè)學(xué)院。開(kāi)發(fā)者:邁拓者工作室。 用戶(hù): 學(xué)院公寓辦的全體教師職工。 參考資料 《管理信息系統(tǒng)案例教程》、《ASP.NET程序設(shè)計(jì)與應(yīng)用開(kāi)發(fā)》等有關(guān)資料。 二.可行性研究前提 要求 “學(xué)生公寓管理系統(tǒng)”必須適應(yīng)當(dāng)前學(xué)校實(shí)際情況,符合國(guó)家各種政策法規(guī),信息指標(biāo)體系滿(mǎn)足標(biāo)準(zhǔn)化要求,能夠協(xié)助公寓辦管理人員統(tǒng)籌安排,提高工作效率。 進(jìn)行可行性研究的方法 主要通過(guò)跟學(xué)院對(duì)系統(tǒng)的需求分析和研究比較的方法 三.系統(tǒng)的方案 系統(tǒng)的目標(biāo):實(shí)現(xiàn)辦公信息化,使公寓管理更加合理、有序,提高辦事效率。 四.系統(tǒng)的功能 系統(tǒng)功能模塊包括五大模塊:管理系統(tǒng)模塊,查詢(xún)學(xué)生模塊,宿舍管理模塊,資料修改模塊,出入登記模塊。 1.管理系統(tǒng)模塊:實(shí)現(xiàn)用戶(hù)退出功能。 2.查詢(xún)學(xué)生模塊:該模塊包括五個(gè)子模塊 按學(xué)號(hào)查詢(xún)——實(shí)現(xiàn)按學(xué)號(hào)查詢(xún)學(xué)生信息 按姓名查詢(xún)——實(shí)現(xiàn)按姓名查詢(xún)學(xué)生信息 按學(xué)生班級(jí)查詢(xún)——實(shí)現(xiàn)按學(xué)生班級(jí)查詢(xún)學(xué)生信息 按宿舍號(hào)查詢(xún) ——實(shí)現(xiàn)按學(xué)生宿舍號(hào)查詢(xún)學(xué)生信息 3.宿舍管理模塊:包括四個(gè)子模塊 基本情況錄入——錄入入住學(xué)生的基本信息 宿舍分配管理——處理學(xué)生的入宿、退宿、更新 個(gè)人財(cái)物處理——登記學(xué)生個(gè)人財(cái)產(chǎn) 4.資料修改模塊:包括;兩個(gè)子模塊 學(xué)生修改——完成學(xué)生基本資料修改,個(gè)人財(cái)物修改和學(xué)期注冊(cè)情況修改 登記修改——實(shí)現(xiàn)來(lái)訪登記修改和物品出入宿舍修改 5.出入登記:包括兩各子模塊 來(lái)訪登記——完成來(lái)訪人員的信息登記 五.系統(tǒng)結(jié)構(gòu) 系統(tǒng)采用B/S結(jié)構(gòu) 五.可行性研究 開(kāi)發(fā)系統(tǒng)的必要性 由于公寓人工管理效率低下,工作繁雜,所以需要建立這樣一個(gè)“學(xué)生公寓管理系統(tǒng)”來(lái)提高效率,便于管理。 開(kāi)發(fā)系統(tǒng)的經(jīng)濟(jì)可行性 學(xué)院提供相關(guān)費(fèi)用。 開(kāi)發(fā)系統(tǒng)的技術(shù)可行性 利用Asp.net, SQL Server等技術(shù)。 在限制條件下,功能目標(biāo)是否能達(dá)到:看是否能給出正確的信息和提示。 對(duì)開(kāi)發(fā)人員數(shù)量和質(zhì)量的要求:七個(gè)開(kāi)發(fā)人員,都精通相關(guān)技術(shù)。在規(guī)定的期限內(nèi)是否能完成:能。 社會(huì)條件方面的可行性 法律方面的可行性:符合法律規(guī)定的相關(guān)條例,完全遵照國(guó)家法規(guī)來(lái)進(jìn)行研究。 用戶(hù)使用的可行性:會(huì)使用計(jì)算機(jī)的公寓管理人員。 #include using namespace std; class Bus_infor { int No; static int Bus_No;char start[20];char end[20];int Bus_order; int all_tickted;int tickted;int Hour_start,Minute_start,Hour_end,Minute_end;int Hour;int Minute; public: Bus_infor *next;Bus_infor();~Bus_infor();int Get_no();int Get_all_tickted();int Get_tickted();int Get_bus_order(); char *Get_start();char *Get_end();void addr(); void Order_tickt(int n);void Unorder_tickt(int n);void GetTime_start();void GetTime_end();void ShowTime();void GetTime();void Show_infor(); void input(){ cout<<“ttt按提示輸入:”< cout<<“tt輸入車(chē)次: ”; cin>>Bus_order; cout<<“請(qǐng)輸入車(chē)的額定載量: ”; cin>>all_tickted; GetTime_start(); GetTime_end(); addr(); char a; cout<<“是否清空售票(y/n)?”< cin>>a; if(a=='y')tickted=0;} void input(ifstream & is) { is>>Bus_order>>start>>end>>all_tickted>>tickted>>Hour_start>>Minute_start>>Hour_end>>Minute_end; is.get(); } void output(){cout<<“客車(chē)基本信息如下:”< <<“ 發(fā)車(chē)時(shí)間:”< <<“ 起點(diǎn)站:”< <<“ 終點(diǎn)站:”< <<“行車(chē)時(shí)間”< <<“額定載量”< void output(ofstream & os) { os< < < < < < < < < < }; int Bus_infor::Bus_No=1; void Bus_infor::GetTime_start(){ int NewH=0,NewM=0;cout<<“請(qǐng)輸入發(fā)車(chē)時(shí)間:”< void Bus_infor::GetTime_end(){ int NewH=0,NewM=0;cout<<“請(qǐng)輸入行車(chē)時(shí)間:”< void Bus_infor::GetTime(){ if(Minute_end>=Minute_start){Minute=(Minute_end-Minute_start);Hour=(Hour_end-Hour_start);} else {Minute=(Minute_end-Minute_start+60);Hour=(Hour_end-Hour_start-1);} } void Bus_infor::ShowTime(){ cout< cout< tickted=0;} Bus_infor::~Bus_infor(){ Bus_No--;} void Bus_infor::addr(){ cout<<“請(qǐng)輸入起點(diǎn)站與終點(diǎn)站:”< cin>>a;cin>>b;strcpy(start,a);strcpy(end,b);} char *Bus_infor::Get_start(){ return start;} char *Bus_infor::Get_end(){ return end;} int Bus_infor::Get_no(){ return No;} int Bus_infor::Get_all_tickted(){ return all_tickted;} int Bus_infor::Get_tickted(){ return tickted;} int Bus_infor::Get_bus_order(){ return Bus_order;} void Bus_infor::Order_tickt(int n){ tickted=tickted+n;} void Bus_infor::Unorder_tickt(int n){ tickted=tickted-n;}; class Bus_link{ public: Bus_link(){head=new Bus_infor;head->next=NULL;key=0;} void input();void mend();void del();int find(Bus_infor **p,int num,char *pn); int find1(Bus_infor **p,int num,char *pn); void found();void show(); void Order(); void Unorder(); void save(); void begin(); void clear(); char mainmenu(); int getkey(){ return key;} void setkey(int k){ key=k;} private: Bus_infor *head; int key;}; void Bus_link::input(){ Bus_infor *p,*p2=NULL;p=head; int n;while(p->next) p=p->next;while(n){ p2=new Bus_infor; p2->input(); p->next=p2; p2->next=NULL; p=p->next; Bus_link::setkey(1); cout<<“ttt按1繼續(xù),按0返回 : ”; cin>>n;} } void Bus_link::Order(){ Bus_infor *p;cout<<“確定購(gòu)票(y/n)?”< int num; cout<<“ttt輸入車(chē)次號(hào): ”; cin>>num; if(!find1(&p,num,“^”)) { cout<<“tt找不到你要定票的車(chē)輛的內(nèi)容!”< return; } cout<<“輸入要定的票數(shù) ”; int n;cin>>n; p=p->next; if((p->Get_tickted()+n)<=p->Get_all_tickted()) {p->Order_tickt(n); cout<<“謝謝使用”< else cout<<“對(duì)不起,沒(méi)有足夠的票數(shù)?!? } else if(X=='n')cout<<“謝謝使用”< void Bus_link::Unorder(){ Bus_infor *p;cout<<“確定退票(y/n)?”< int num; cout<<“ttt輸入車(chē)次號(hào): ”; cin>>num; if(!find1(&p,num,“^”)) { cout<<“tt找不到你要定票的車(chē)輛的內(nèi)容!”< return; } cout<<“輸入要退的票數(shù) ”; int n;cin>>n; p=p->next; if((p->Get_tickted()-n)>=0) p->Unorder_tickt(n); else cout<<“對(duì)不起,數(shù)據(jù)出錯(cuò)!。”< } else if(X=='n')cout<<“謝謝使用”< void Bus_link::found(){ Bus_infor *p;int num=-1,n=9;char name[20]=“^”;do { cout<<“tt1:按車(chē)次查找,2:按終點(diǎn)站查找: ”; cin>>n;}while(n<1||n>2);if(n==1){ cout<<“ttt輸入車(chē)次: ”; cin>>num;} if(n==2){ cout<<“ttt輸入終點(diǎn)站: ”; cin>>name;} if(!find(&p,num,name)){ cout<<“tt找不到你要查找的內(nèi)容!”< return;} } int Bus_link::find(Bus_infor **p1,int num,char *pn){ Bus_infor *p; p=head; int t=0; while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||!strcmp((p->next)->Get_end(),pn)) { (p->next)->output(); t=1; break; } p=p->next;} return t;} int Bus_link::find1(Bus_infor **p1,int num,char *pn){ Bus_infor *p;p=head;int t=0;while(p->next){ (*p1)=p; if((p->next)->Get_bus_order()==num||!strcmp((p->next)->Get_end(),pn)) {return 1;} p=p->next;} return 0;} void Bus_link::del(){ Bus_infor *p,*p2;int num;cout<<“ttt輸入車(chē)次號(hào): ”;cin>>num; if(!find(&p,num,“^”)){ cout<<“tt找不到你要?jiǎng)h除的內(nèi)容!”< return;} p2=p->next;p->next=p2->next;delete p2;Bus_link::setkey(1);} void Bus_link::show(){ Bus_infor *p;p=head;while(p->next){ (p->next)->output(); p=p->next;} } void Bus_link::mend(){ Bus_infor *p;int num=-1;char name[20]=“^”; cout<<“ttt輸入車(chē)次號(hào): ”;cin>>num; if(!find1(&p,num,name)){ cout<<“tt找不到你要修改的內(nèi)容!”< return;}(p->next)->output();(p->next)->input();Bus_link::setkey(1);} void Bus_link::save(){ Bus_infor *p;p=head;ofstream os(“bus.txt”,ios::out);if(Bus_link::getkey()==1){ while(p->next) { (p->next)->output(os); p=p->next; } } cout<<“ttt文件已保存!”< Bus_infor *p,*p2;p=head;clear();long t;ifstream is(“bus.txt”,ios::in); if(!is){ ofstream os(“bus.txt”,ios::out); os.close(); return;} int num=-1;while(1){ num=-1; t=is.tellg(); is>>num; is.seekg(t); if(num<0) { is.close(); return; } p2=new Bus_infor; p2->input(is); p->next=p2; p2->next=NULL; p=p->next;} } void Bus_link::clear(){ Bus_infor *p,*p2;p=head->next;while(p){ p2=p; p=p->next; delete p2;} } char Bus_link::mainmenu(){ char n[6];cout<<“nn ---歡迎使用車(chē)票管理系統(tǒng)---”< 制作人 劉強(qiáng) ”< <<“ 物理學(xué)院 ”< <<“ ”< <<“ 1.錄入車(chē)票信息 2.瀏覽車(chē)票信息 <<” 3.查詢(xún)車(chē)票信息 4.刪除車(chē)票信息 <<“ 5.修改車(chē)票信息 6.定購(gòu)車(chē)票信息 <<” 7.退還車(chē)票信息 8.保存車(chē)票信息 <<“ 0: 退出系統(tǒng) <<”--------------------------“< <<”--------------------------“< <<” 請(qǐng)選擇功能按鈕: “;cin>>n;return n[0];} int main(){ Bus_link pp;int k=1;char n;pp.begin(); while(k==1){ n=pp.mainmenu(); switch(n) { case '1':pp.input();break; case '2':pp.show();break; case '3':pp.found();break; ”< case '4':pp.del();break; case '5':pp.mend();break; case '6':pp.Order();break; case '7':pp.Unorder();break; case '8':pp.save();break; case '0': if(pp.getkey()==1) { cout<<“ttt是否保存? 1 : 保存 0:不保存 : ”; cin>>k; if(k==1) pp.save(); } pp.clear(); k=0; break; } } return 0;}第三篇:火車(chē)票訂票管理系統(tǒng)++設(shè)計(jì)報(bào)告
第四篇:學(xué)生公寓管理系統(tǒng)可行性報(bào)告
第五篇:c++課程實(shí)踐火車(chē)票管理系統(tǒng)