课题容求
改系统求实现简单实火车票理程序功包括火车票数录入查找删显示售票退票等火车票数利文件系统保存备系统次运行时通课题熟练掌握文件数组指针种操作基算法思想应
二 需求分析
功框架图:(见图21)
火车票理系统
录入
查找
删
排序
售票
退票
保存
图21
1 新增火车票数记录:预先建立txt文档存入数然程序中读取文档
2 查找火车票数(车次发车时间起点站终点站等查找)
3 删火车票数记录(先查找删查找出条记录进步提示户选择记录车次删)
4 火车票排序(车次发车时间起点站终点站等排序)
5 显示前火车票信息列表
6 售票(先查找确定车次根售票张数该车次已售票数进行修改)
7 退票(售票逆处理程售票类似)
8 保存火车票数文件中
9 文件中读入火车票数
三概设计
1)结构体:
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)函数流程图:
l 载入函数:文中载入信息(见图31)
开文
否开
读入数
否结束
结束
否
否
开始
开始
否
读入车次
否符合
输出信息
结束
图32
图31
l 查找函数:利输入车次站点进行序查找找信息输出(见图32)
l 删函数:先查找出删信息删(见图33)
否
否
法订票
数加
否超载
否
图34
结束
开始
读入车次
否误点
否
图33
否
否符合
读入车次
开始
记录标i
ii+1i++
i<车次总数1
结束
l 售票退票函数:先判断该车否已发车未发车未满订票成功否法订票退票(见图34)
l 备份文件函数:文件容存储户定址中(见图3—5)
图35
l 排序函数(见图36)
图36
四源程序代码
#include
#include
#include
#include
#include
#include
const int MAX20
const int N50
const int MAXFILENAME100
enum {FALSETRUE}
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 FLAGFALSE
**********************************************
int ShowMessage(void) 载入原始数
void mainmenu(void) 菜单
void InsertMessage(void) 录入班次信息
void SearchMenu(void) 查询路线子菜单
void SearchByNumber(void) 班次号查询
void SearchByAddress(void) 终点站查询
void cancle(void)删数
void selection(ticket *paint n)排序
void TicketManagement(void) 车票售出退回
void TicketOrder(void) 售票
void TicketDelete(void) 退票
void exit(void) 退出该系统
void SaveRecord(ticket x) 储存信息文件中
********************************************
int main(void)
{
do{
mainmenu()
}while(FLAGFALSE)
return 0
}
void mainmenu(void)
{
system(mode con cols140 lines130)
char functionNumber
printf( 火车票理系统\n\n)
printf(\n)
printf( 1录入班次信息\t\n)
printf( 2显示车票信息列表\t\n)
printf( 3查询火车票数\t\n)
printf( 4删火车票数记录\t\n)
printf( 5行车时间排序\t\n)
printf( 6售票退票系统\t\n)
printf( 7退出该系统\t\n)
printf(\n)
printf(请选择需功)
scanf(c&functionNumber)
switch(functionNumber)
{
case '1'
{
InsertMessage()
printf(\n意键回菜单\n)
getchar()
getchar()
}
break
case '2'
{
RecordNumberShowMessage()
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(trainRecordNumber)
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
int i
for(i0i
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ntrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
}
printf(\n意键回菜单\n)
getchar()
getchar()
}
break
case '6'
{
TicketManagement()
getchar()
getchar()
}
break
case '7'
{
int i
FLAGTRUE
for(i0i
SaveRecord(*(train+i))
}
exit()
}
break
default
{
printf(输入错误请确保输入17\n)
printf(意键回菜单\n)
getchar()
getchar()
}
}switch ends
FLAGFALSE
}
void InsertMessage(void)
{
FILE *fp
char filename[MAXFILENAME]
int i
printf(请输入文件名者文件路径名)
scanf(sfilename)
if((fpfopen(filenamer))NULL)
{
printf(文件s读请确认文件s存者文件路径正确\n\nfilenamefilename)
mainmenu()
}
for(iRecordNumberfeof(fp)&&ferror(fp)i++)
{
fscanf(fpsdd&train[i]SerialNumber&train[i]SetOuthour&train[i]SetOutminutes)
fscanf(fpssfdd&train[i]DeparturePoint&train[i]TerminalPoint&train[i]LastTime&train[i]FixNumber&train[i]FixedNumber)
}
RecordNumberi
*******************************输出更新订票记录************************************************************
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
for(i0i
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ntrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
}
fclose(fp)
}
int ShowMessage(void)
{
int i
FILE *fp
if((fpfopen(addtxtr))NULL)
{
printf(读取数失败请检查文件addtxt否存\n)
exit(1)
}
for(iRecordNumberfeof(fp)&&ferror(fp)i++)
{
fscanf(fpsdd&train[i]SerialNumber&train[i]SetOuthour&train[i]SetOutminutes)
fscanf(fpssfdd&train[i]DeparturePoint&train[i]TerminalPoint&train[i]LastTime&train[i]FixNumber&train[i]FixedNumber)
}
int counti
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
for(i0i
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ttrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
printf(\n)
}
return count
}
void SearchMenu(void)
{
system(mode con cols140 lines130)
char functionNumber
printf( 查询子菜单\n)
printf(\n)
printf( 1班次号查询\t\n)
printf( 2终点站查询\t\n)
printf( 3返回菜单\t\n)
printf(\n)
printf(请选择需功)
scanf(*cc&functionNumber)
switch(functionNumber)
{
case '1'SearchByNumber()break
case '2'SearchByAddress()break
case '3'
getchar()
mainmenu()
break
default
printf(输入错误请确保输入13\n)
printf(意键回查询子菜单\n)
getchar()
getchar()
SearchMenu()
}
}
void SearchByNumber(void)
{
int i
char Number[MAX]
printf(请输入班次号)
scanf(s&Number)
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
for(i0i
终点站记录找输出
if((strcmp(Numbertrain[i]SerialNumber))0)
{
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ntrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
}
}
}
void SearchByAddress(void)
{
int i
char Address[MAX]
printf(请输入终点站名称)
scanf(s&Address)
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
for(i0i
终点站记录找输出
if((strcmp(Addresstrain[i]TerminalPoint))0)
{
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ntrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
}
}
}
void cancle(void)
{
SearchMenu()
int ij
char m[MAX]
printf(请输入删班次)
scanf(s&m)
for(i0i
if(iRecordNumber)
{
printf(起没趟车\n)
}
}
for(jij
train[j]train[j+1]
}
printf(删成功\n)
}
void selection(ticket *paint n)
{
int ikindex
struct ticket temp
for(k0k
indexk
for(ik+1i
if(indexk)
{
temppa[index]
pa[index]pa[k]
pa[k]temp
}
}
}
void TicketManagement(void)
{
char functionNumber
system(mode con cols140 lines130)
printf( 订票退票菜单\n)
printf(\n)
printf( 1订票\t\n)
printf( 2退票\t\n)
printf( 3返回菜单\n)
printf(\n)
printf(选择需功)
scanf(*cc&functionNumber)
switch(functionNumber)
{
case '1'
{
TicketOrder()
getchar()
getchar()
}
break
case '2'TicketDelete()break
case '3'
{
getchar()
mainmenu()
}
break
default
{
printf(输入错误请确保输入13\n)
printf(意键回菜单\n)
getchar()
getchar()
mainmenu()
}
}
}
void TicketOrder(void)
{
SearchMenu()
int ij
char a[MAX]
printf(请输入订购车票班次)
scanf(s&a)
printf(请输入订购车票张数)
scanf(d&j)
for(i0i
if((strcmp(atrain[i]SerialNumber))0)
{
if(train[i]FixedNumber
(train[i]FixedNumber)+j
printf(订票成功请时车谢谢\n)
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ntrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
}
else printf(起票已卖完\n)
}
}
}
void TicketDelete(void)
{
SearchMenu()
int ij
char b[MAX]
printf(请输入退购车票班次)
scanf(s&b)
printf(请输入退购车票张数)
scanf(d&j)
for(i0i
if((strcmp(btrain[i]SerialNumber))0)
{
if(train[i]FixedNumber>1)
{
train[i]FixedNumberj
printf(退订车票成功谢谢\n)
printf(班次\t发车时间\t起点\t终点\t行车时间(时)\t额定载量\t已定票数\n)
printf(s\tdd\t\ttrain[i]SerialNumbertrain[i]SetOuthourtrain[i]SetOutminutes)
printf(s\ts\t\t1f\t d\t\td\ntrain[i]DeparturePointtrain[i]TerminalPointtrain[i]LastTimetrain[i]FixNumbertrain[i]FixedNumber)
}
else printf(起天趟车票尚未卖出法完成退票\n)
}
}
}
void exit(void)
{
printf(\n\n*********************谢谢系统欢迎次继续***********************\n)
exit(0)
}
void SaveRecord(ticket x)
{
FILE *fp
if((fpfopen(addtxta))NULL)
{
printf(开文件s失败\naddtxt)
exit(1)
}
fprintf(fp\ns\td\td\t\txSerialNumberxSetOuthourxSetOutminutes)
fprintf(fps\ts\t\t1f\t d\t\tdxDeparturePointxTerminalPointxLastTimexFixNumberxFixedNumber)
}
五测试数结果分析
显示菜单界面:
火车票理系统
1录入班次信息
2显示车票信息列表
3查询火车票数
4删火车票数记录
5行车时间排序
6售票退票系统
7退出该系统
请选择需功
1)录入班次信息
输入:1
输出:请输入文件名者文件路径名
输入:D\\1txt
输出:
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k1111 830 南京 海 40 300 200
k1234 1020 海 苏州 20 200 50
t2222 1240 长沙 海 90 250 100
k2323 1350 扬州 南京 15 200 70
k1122 920 广州 南京 200 300 170
意键回菜单
2)显示车票信息列表
输入:2
输出:
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k1111 830 南京 海 40 300 200
k1234 1020 海 苏州 20 200 50
t2222 1240 长沙 海 90 250 100
k2323 1350 扬州 南京 15 200 70
k1122 920 广州 南京 200 300 170
意键回菜单
3)查询火车票记录
输入:3
输出:
查询子菜单
1班次号查询
2终点站查询
3返回菜单
请选择需功
输入:1
输出:请输入班次号:
输入:k1111
输出:
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k1111 830 南京 海 40 300 200
意键回菜单
输入:2
输出:请输入终点站名称:
输入:海
输出:
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k1111 830 南京 海 40 300 200
t2222 1240 长沙 海 90 250 100
意键回菜单
4)删火车票数
输入:4
输出:查询子菜单
1班次号查询
2终点站查询
3返回菜单
请选择需功
(查找程)
输出:请输入删班次:
输入t2222
输出:删成功
意键回菜单
5)行车时间排序:
输入:5
输出:
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k2323 1350 扬州 南京 15 200 70
k1234 1020 海 苏州 20 200 50
k1111 830 南京 海 40 300 200
t2222 1240 长沙 海 90 250 100
k1122 920 广州 南京 200 300 170
意键回菜单
6)售票
输入:6
输出:
订票退票菜单
1.订票
2.退票
3.返回菜单
选择需功:
输入:1
输出:
查询子菜单
1班次号查询
2终点站查询
3返回菜单
请选择需功
(查询程)
输出:请输入需订购车票班次
输入:k1111
输出:请输入订购车票张数
输入:10
输出:
您订票成功请时车谢谢
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k1111 830 南京 海 40 300 210 7)退票
输入:6
输出:
订票退票菜单
1.订票
2.退票
3.返回菜单
选择需功:
输入:2
输出:
查询子菜单
1班次号查询
2终点站查询
3返回菜单
请选择需功
(查询程)
输出:请输入需退购车票班次
输入:k1111
输出:请输入订购车票张数
输入:5
退订车票成功谢谢
班次 发车时间 起点 终点 行车时间(时) 额定载量 已定票数
k1111 830 南京 海 40 300 195
8)退出
输入:7
输出:****************谢谢系统欢迎次继续****************
结果分析:(1)输入数字1——7间会提示错误
(2)输入列车班次信息正确时会结果
(3)文件录入正确时会结果
六调试程中问题
1)文件存储方式正确:应先定义文件存储函数函数中调方便效
2)删时遇没班次程序出错应存输入列车班次时输出存提示
3)保存次运行时出错问题:保存信息时应信息间加空格保存否文件次时读取会没分界点
4)订票退票次张应户输入列车班次户输入需订购张数
5)结构指针定义错误ticket前应加struct
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档