第一篇:c语言火车票管理系统基本代码
#include
int shoudsave = 0;int count1 = 0, count2 = 0, mark = 0, mark1 = 0;structtrain {
};structman {
};typedefstructnode { structtrain data;structnode * next;char num[10];char name[10];int bookNum;char num[10];char city[10];char takeoffTime[10];char receiveTime[10];int price;int bookNum;}Node, *Link;typedefstructpeople { structman data;structpeople*next;}bookMan, *bookManLink;void printInterface(){
puts(“********************************************************”);puts(“* Welcome to use the system of booking tickets *”);puts(“********************************************************”);puts(“* You can choose the operation: *”);puts(“* 1:Insert a train information *”);puts(“* 2:Inquire a train information *”);puts(“* 3:Book a train ticket *”);
} puts(“* 4:Update the train information *”);puts(“* 5:Advice to you about the train *”);puts(“* 6:save information to file *”);puts(“* 7:quit the system *”);puts(“********************************************************”);/*添加一个火车信息*/
void InsertTraininfo(Linklinkhead){
structnode *p, *r, *s;char num[10];r = linkhead;s = linkhead->next;while(r->next!= NULL){
printf(“please input the number of the train(0-return)”);scanf(“%s”, num);if(strcmp(num, “0”)== 0){
} p =(structnode*)malloc(sizeof(structnode));strcpy(p->data.num, num);printf(“Input the city where the train will reach:”);scanf(“%s”, p->data.city);printf(“Input the time which the train take off:”);scanf(“%s”, p->data.takeoffTime);printf(“Input the time which the train receive:”);scanf(“%s”, &p->data.receiveTime);printf(“Input the price of ticket:”);scanf(“%d”, &p->data.price);printf(“Input the number of booked tickets:”);if(strcmp(s->data.num, num)== 0){
} s = s->next;printf(“the train '%s'has been born!n”, num);return;break;while(s)r = r->next;while(1)
scanf(“%d”, &p->data.bookNum);
p->next = NULL;
r->next = p;
r = p;
shoudsave = 1;} } void printTrainInfo(structnode*p){ puts(“nThe following is the record you want:”);printf(“>>number of train: %sn”, p->data.num);printf(“>>city the train will reach: %sn”, p->data.city);printf(“>>the time the train take off: %snthe time the train reach: %sn”p->data.takeoffTime, p->data.receiveTime);printf(“>>the price of the ticket: %dn”, p->data.price);printf(“>>the number of booked tickets: %dn”, p->data.bookNum);}
structnode * Locate1(Linkl, charfindmess[], charnumorcity[]){ Node*r;if(strcmp(numorcity, “num”)== 0){
r = l->next;
while(r)
{
if(strcmp(r->data.num, findmess)== 0)
return r;
r = r->next;
} } elseif(strcmp(numorcity, “city”)== 0){
r = l->next;
while(r)
{
if(strcmp(r->data.city, findmess)== 0)
return r;
r = r->next;
} } , } return 0;void QueryTrain(Linkl){
Node *p;int sel;char str1[5], str2[10];if(!l->next){
} printf(“Choose the way:n>>1:according to the number of train;n>>2:according to the scanf(”%d“, &sel);if(sel == 1){
} elseif(sel == 2){
printf(”Input the city:“);scanf(”%s“, str2);p = Locate1(l, str2, ”city“);if(p){ } printTrainInfo(p);printf(”Input the the number of train:“);scanf(”%s“, str1);p = Locate1(l, str1, ”num“);if(p){ } else {
} mark1 = 1;printf(”nthe file can't be found!“);printTrainInfo(p);printf(”There is not any record!“);return;city:n”);
}
} else {
} mark1 = 1;printf(“nthe file can't be found!”);void BookTicket(Linkl, bookManLinkk){
Node*r[10], *p;char ch, dem;bookMan*v, *h;int i = 0, t = 0;char str[10], str1[10], str2[10];v = k;while(v->next!= NULL)v = v->next;printf(“Input the city you want to go: ”);scanf(“%s”, &str);p = l->next;while(p!= NULL){
} printf(“nnthe number of record have %dn”, i);for(t = 0;t
{
printf(“ndo you want to book it?<1/0>n”);scanf(“%d”, &ch);if(ch == 1){ h =(bookMan*)malloc(sizeof(bookMan));printTrainInfo(r[t]);printf(“ntttSorry!Can't find the train for you!n”);if(i == 0)else if(strcmp(p->data.city, str)== 0){
} p = p->next;r[i] = p;i++;
}
}
} printf(“Input your name: ”);scanf(“%s”, &str1);strcpy(h->data.name, str1);printf(“Input your id: ”);scanf(“%s”, &str2);strcpy(h->data.num, str2);printf(“Input your bookNum: ”);scanf(“%d”, &dem);h->data.bookNum = dem;h->next = NULL;v->next = h;v = h;printf(“nLucky!you have booked a ticket!”);getch();shoudsave = 1;bookMan*Locate2(bookManLinkk, charfindmess[]){
} /*修改火车信息*/ void UpdateInfo(Linkl){
Node*p;char findmess[20], ch;if(!l->next){ printf(“nthere isn't record for you to modify!n”);bookMan*r;r = k->next;while(r){
} return 0;if(strcmp(r->data.num, findmess)== 0){
} r = r->next;mark = 1;return r;
} } return;else {
} QueryTrain(l);if(mark1 == 0){
} else mark1 = 0;printf(“nDo you want to modify it?n”);getchar();scanf(“%c”, &ch);if(ch == 'y');{
} printf(“nInput the number of the train:”);scanf(“%s”, findmess);p = Locate1(l, findmess, “num”);if(p){
} else printf(“tttcan't find the record!”);printf(“Input new number of train:”);scanf(“%s”, &p->data.num);printf(“Input new city the train will reach:”);scanf(“%s”, &p->data.city);printf(“Input new time the train take off”);scanf(“%s”, &p->data.takeoffTime);printf(“Input new time the train reach:”);scanf(“%s”, &p->data.receiveTime);printf(“Input new price of the ticket::”);scanf(“%d”, &p->data.price);printf(“Input new number of people who have booked ticket:”);scanf(“%d”, &p->data.bookNum);printf(“nmodifying record is sucessful!n”);shoudsave = 1;void AdvicedTrains(Linkl){
} void SaveTrainInfo(Linkl){
FILE*fp;Node*p;int count = 0, flag = 1;fp = fopen(“D: rain.txt”, “wb”);if(fp == NULL){
} p = l->next;while(p){
if(fwrite(p, sizeof(Node), 1, fp)== 1){
} p = p->next;count++;printf(“the file can't be opened!”);return;Node*r;char str[10];int mar = 0;r = l->next;printf(“Iuput the city you want to go: ”);scanf(“%s”, str);while(r){
} if(mar == 0)printf(“ntttyou can't book any ticket now!n”);if(strcmp(r->data.city, str)== 0 && r->data.bookNum < 200){
} r = r->next;mar = 1;printf(“nyou can select the following train!n”);printf(“nnplease select the fourth operation to book the ticket!n”);printTrainInfo(r);
}
} else {
} flag = 0;break;if(flag){
} fclose(fp);printf(“the number of the record which have been saved is %dn”, count);shoudsave = 0;void SaveBookmanInfo(bookManLinkk){
FILE*fp;bookMan*p;int count = 0, flag = 1;fp = fopen(“D:man.txt”, “wb”);if(fp == NULL){
} p = k->next;while(p){
} if(flag){ printf(“the number of the record which have been saved is %dn”, count);if(fwrite(p, sizeof(bookMan), 1, fp)== 1){
} else {
} flag = 0;break;p = p->next;count++;printf(“the file can't be opened!”);return;
} } shoudsave = 0;fclose(fp);int main(){
FILE*fp1, *fp2;Node*p, *r;char ch1, ch2;Link l;bookManLink k;bookMan*t, *h;int sel;l =(Node*)malloc(sizeof(Node));l->next = NULL;r = l;k =(bookMan*)malloc(sizeof(bookMan));k->next = NULL;h = k;fp1 = fopen(“D: rain.txt”, “ab+”);if((fp1 == NULL)){
} while(!feof(fp1)){
} fclose(fp1);fp2 = fopen(“D:man.txt”, “ab+”);if((fp2 == NULL)){ p =(Node*)malloc(sizeof(Node));if(fread(p, sizeof(Node), 1, fp1)== 1){
} p->next = NULL;r->next = p;r = p;count1++;printf(“can't open the file!”);return 0;
} printf(“can't open the file!”);return 0;while(!feof(fp2)){
} fclose(fp2);while(1){
system(“cls”);printInterface();printf(“please choose the operation: ”);scanf(“%d”, &sel);system(“cls”);if(sel == 8){
} switch(sel)if(shoudsave == 1){
} printf(“nThank you!You are welcome toon”);break;getchar();printf(“nthe file have been changed!do you want to save it(y/n)?n”);scanf(“%c”, &ch1);if(ch1 == 'y' || ch1 == 'Y'){
} SaveBookmanInfo(k);SaveTrainInfo(l);t =(bookMan*)malloc(sizeof(bookMan));if(fread(t, sizeof(bookMan), 1, fp2)== 1){
} t->next = NULL;h->next = t;h = t;count2++;
}
} { case 1:
} printf(“nplease press any key to continue.......”);getch();InsertTraininfo(l);break;QueryTrain(l);break;BookTicket(l, k);break;UpdateInfo(l);break;AdvicedTrains(l);break;SaveTrainInfo(l);SaveBookmanInfo(k);break;return 0;case 2: case 3: case 4: case 5: case 6: case 7: return 0;
第二篇:火车票管理系统
火车票管理系统一、课题内容和要求
改系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
二、需求分析
功能框架图:(见图2-1)
火车票管理系统
录入
查找
删除
排序
售票
退票
保存
图2-1。
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
载入函数:用于从文本中载入信息。(见图3-1)
打开文本
能否打开
读入数据
是否结束
结束
否
否
开始
开始
否
是
是
读入车次
是否符合输出信息
结束
是
图3-2
图3-1
l
查找函数:利用输入的车次或站点进行顺序查找并将找到的信息输出。(见图3-2)
l
删除函数:先查找出要删除的信息再删除。(见图3-3)
否
否
是
无法订票
人数加一
是否超载
否
图3-4
结束
开始
读入车次
是否误点
否
图3-3
是
是
否
是否符合读入车次
开始
记录下标i
i=i+1,i++
i<车次总数-1
结束
l
售票退票函数:先判断该车是否已发车,若未发车且人未满则订票成功,否则无法订票退票。(见图3-4)
l
备份文件函数:将文件内容存储到用户给定的地址中(见图3—5)
图3-5
l
排序函数(见图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);
//载入原始数据
void
mainmenu(void);
//主菜单
void
InsertMessage(void);
//录入班次信息
void
SearchMenu(void);
//查询路线子菜单
void
SearchByNumber(void);
//按班次号查询
void
SearchByAddress(void);
//按终点站查询
void
cancle(void);//删除数据
void
selection(ticket
*pa,int
n);//排序
void
TicketManagement(void);
//车票售出与退回
void
TicketOrder(void);
//售票
void
TicketDelete(void);
//退票
void
exit(void);
//退出该系统
void
SaveRecord(ticket
x);
//储存信息到文件中
/********************************************/
int
main(void)
{
do{
mainmenu();
}while(FLAG==FALSE);
return
0;
}
void
mainmenu(void)
{
system(“mode
con:
cols=140
lines=130“);
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':
{
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发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\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(“输入错误,请确保你的输入为1--7.\n“); printf(“按任意键回主菜单......\n“); getchar(); getchar(); } }//switch ends FLAG=FALSE; } void InsertMessage(void) { FILE *fp; char filename[MAXFILENAME]; int i; printf(“请输入文件名或者文件路径名:“); scanf(“%s“,filename); if((fp=fopen(filename,“r“))==NULL) { printf(“文件%s不可读,请确认文件%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发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\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(“读取数据失败,请检查文件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发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\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(“ 查询子菜单\n“); printf(“============================================================================\n“); printf(“ 1.按班次号查询\t\n“); printf(“ 2.按终点站查询\t\n“); printf(“ 3.返回主菜单\t\n“); printf(“============================================================================\n“); printf(“请选择你所需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1':SearchByNumber();break; case '2':SearchByAddress();break; case '3': getchar(); mainmenu(); break; default: printf(“输入错误,请确保你的输入为1--3.\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(i=0;i { //对比终点站记录,找到并输出 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(“请输入终点站的名称:“); scanf(“%s“,&Address); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { //对比终点站记录,找到并输出 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(“请输入要删除的班次:“); scanf(“%s“,&m); for(i=0;i { if(i==RecordNumber) { printf(“对不起,没有这趟车\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(“输入错误,请确保你的输入为1--3.\n“); printf(“按任意键回主菜单......\n“); getchar(); getchar(); mainmenu(); } } } void TicketOrder(void) { SearchMenu(); int i,j; char a[MAX]; printf(“请输入要订购的车票的班次:“); scanf(“%s“,&a); printf(“请输入要订购的车票的张数:“); scanf(“%d“,&j); for(i=0;i { if((strcmp(a,train[i].SerialNumber))==0) { if(train[i].FixedNumber { (train[i].FixedNumber)+=j; printf(“你的订票成功,请按时上车,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\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(“对不起,票已卖完\n“); } } } void TicketDelete(void) { SearchMenu(); int i,j; char b[MAX]; printf(“请输入要退购的车票的班次:“); scanf(“%s“,&b); printf(“请输入要退购的车票的张数:“); scanf(“%d“,&j); for(i=0;i { if((strcmp(b,train[i].SerialNumber))==0) { if(train[i].FixedNumber>=1) { train[i].FixedNumber-=j; printf(“退订车票成功,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\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(“对不起,今天的这趟车的票尚未卖出,无法完成退票!\n“); } } } void exit(void) { printf(“\n\n*********************谢谢使用本系统,欢迎下次继续使用***********************\n“); exit(0); } void SaveRecord(ticket x) { FILE *fp; if((fp=fopen(“add.txt“,“a“))==NULL) { printf(“打开文件%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); } 五、测试数据及其结果分析 显示的主菜单界面: 火车票管理系统 ============================================================================ 1.录入班次信息 2.显示所有车票信息列表 3.查询火车票数据 4.删除火车票数据记录 5.按行车时间排序 6.售票与退票系统 7.退出该系统 ============================================================================ 请选择你所需要的功能: 1)录入班次信息 输入:1 输出:请输入文件名或者文件路径名: 输入:D:\\1.txt 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 t2222 12:40 长沙 上海 9.0 250 k2323 13:50 扬州 南京 1.5 200 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......2)显示所有车票信息列表 输入:2 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 t2222 12:40 长沙 上海 9.0 250 k2323 13:50 扬州 南京 1.5 200 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......3)查询火车票记录 输入:3 输出: 查询子菜单 ============================================================================ 1.按班次号查询 2.按终点站查询 3.返回主菜单 ============================================================================ 请选择你所需要的功能: 输入:1 输出:请输入班次号: 输入:k1111 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 按任意键回主菜单......输入:2 输出:请输入终点站的名称: 输入:上海 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 按任意键回主菜单......4)删除火车票数据 输入:4 输出:查询子菜单 ============================================================================ 1.按班次号查询 2.按终点站查询 3.返回主菜单 ============================================================================ 请选择你所需要的功能: (查找过程同上) 输出:请输入要删除的班次: 输入:t2222 输出:删除成功 按任意键回主菜单......5)按行车时间排序: 输入:5 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k2323 13:50 扬州 南京 1.5 200 k1234 10:20 上海 苏州 2.0 200 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......6)售票 输入:6 输出: 订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能: 输入:1 输出: 查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上) 输出:请输入需要订购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:10 输出: 您的订票成功,请按时上车,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 210 7)退票 输入:6 输出: 订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能: 输入:2 输出: 查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上) 输出:请输入需要退购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:5 退订车票成功,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 195 8)退出 输入:7 输出:****************谢谢使用本系统,欢迎下次继续使用**************** 结果分析:(1).若输入数字不在1——7之间,则会提示错误。 (2).当输入列车班次信息不正确时,将不会得到结果。 (3).文件录入不正确时,将不会得到任何结果。 六、调试过程中的问题 1)文件存储方式不正确:应先定义一个文件存储函数,在其它函数中调用,方便有效。 2)删除时若遇到没有的班次则程序出错。应在不存在输入的列车班次时,输出不存在的提示 3)保存后在下次运行时出错问题:在保存信息时,应在每个信息之间加一空格来保存,否则在文件下次使用时读取就会没有分界点。 4)订票退票只能一次一张。应在用户输入列车班次后让用户输入需要订购的张数。 5)结构指针定义错误,ticket前不应加struct。 #include //编号// char name[20]; //起点和终点// char time[5]; //出发时间// int price; //车票价格// int amount; //剩余数量// struct Node *next;}Node;//创建链表并输入数据// struct Node *creat(){ struct Node *head,*r,*s; int i=0; char choice; head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;r=head;do { s=(struct Node *)malloc(sizeof(struct Node));s->next=NULL;printf(“请输入第%d种火车票的信息:n”,++i);printf(“请输入火车的编号:”); scanf(“%d”,&s->num); printf(“起点和终点:”);scanf(“%s”,s->name);printf(“出发时间:”);scanf(“%s”,s->time);printf(“车票价格:”);scanf(“%d”,&s->price);printf(“剩余数量:”);scanf(“%d”,&s->amount); r->next=s; r=s; printf(“Continue?(Y/N)”);scanf(“%s”,&choice);}while(choice=='Y'||choice=='y'); r->next=NULL;return(head);} //将单链表中的信息保存到文件1.txt中// void save(struct Node *h){ struct Node *s;FILE *fp; char filename[10]=“1.txt”; fp=fopen(“1.txt”,“wt”);if(fp==NULL){ printf(“n写文件出错,按任意键退出!”);getchar();exit(1);} for(s=h->next;s!=NULL;s=s->next) fprintf(fp,“%d %s %s %d %d n”,s->num,s->name,s->time,s->price,s->amount); getchar();fclose(fp);} // 从文件1.txt中读取信息并存入单链表中// struct Node *read(){ struct Node *head,*r,*s;FILE *fp;char filename[10]=“zl.txt”;fp=fopen(“1.txt”,“rt”);if(fp==NULL){ printf(“读文件错误,按任意键退出!”);getchar();exit(1);} head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;r=head;while(!feof(fp)){ s=(struct Node *)malloc(sizeof(struct Node));fscanf(fp,“%d %s %s %d %d”,&s->num,s->name,s->time,&s->price,&s->amount); r->next=s;r=s; } r->next=NULL;fclose(fp); return head;} //将链表中的数据输出// void print(struct Node *h){ struct Node *s; printf(“n火车票信息如下:n”); printf(“~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~n”);printf(“编号 起点和终点 出发时间 车票价格 剩余票数:n”); for(s=h->next;s->next!=NULL;s=s->next){ printf(“ %d %10s %5s %10d %6dn”,s->num,s->name,s->time,s->price,s->amount);} } //链表查询// struct Node * find(struct Node *h){ int i,j;char s[20];printf(“tt 查询方法有以下几种:n”);printf(“tt 1.火车票编号n”);printf(“tt 2.起点和终点n”);printf(“tt 3.出发时间n”);printf(“tt 4.车票价格n”);printf(“tt 5.剩余票数n”);printf(“请输入您要查询的方法的序号:”);scanf(“%d”,&i);switch(i){ case 1:printf(“请输入你要查询火车票的编号:”);scanf(“%d”,&j); while(h->next!=NULL) { h=h->next; if(h->num==j)return h; } return NULL;break;case 2:printf(“请输入您要查询火车票的起点和终点:”);scanf(“%s”,s);while(h->next!=NULL){ h=h->next;if(strcmp(h->name,s)==0) return h; } return NULL;break;case 3:printf(“请输入您要查询火车票的时间:”); scanf(“%s”,s); while(h->next!=NULL) { h=h->next; if(strcmp(h->time,s)==0) return h; } return NULL; break;case 4:printf(“请输入你要查询火车票的价格 :”);scanf(“%d”,&j); while(h->next!=NULL) { h=h->next; if(h->price==j) return h; } return NULL; break;case 5:printf(“请输入你要查询火车票的剩余票数:”);scanf(“%d”,&j); while(h->next!=NULL) { h=h->next; if(h->amount==j) return h; } return NULL; break;} } //修改信息// change(struct Node *h,int k){ int j;struct Node *p;p=find(h);printf(“------------n”);printf(“t 您要修改哪一项?n”);printf(“t 1.火车编号n”);printf(“t 2.起点和终点n”);printf(“t 3.出发时间n”);printf(“t 4.车票价格n”); printf(“t 5.剩余票数n”);printf(“t 0.退出系统n”); printf(“------------n”);printf(“请输入您要修改项的编号:”);scanf(“%d”,&j);switch(j) { case 1: printf(“修改后的火车编号:”); scanf(“%d”,&p->num); break; case 2: printf(“修改后的起点和终点:”); scanf(“%s”,p->name); break; case 3: printf(“修改后的出发时间:”); scanf(“%s”,p->time); break; case 4: printf(“修改后的车票价格:”); scanf(“%d”,&p->price); break; case 5: printf(“修改后的剩余票数:”); scanf(“%d”,&p->amount); break; case 0:break;} } //删除信息// delete(struct Node *h){ struct Node *p; int j; printf(“请输入您要删除的火车票的编号:”);scanf(“%d”,&j);p=h->next; if(p==NULL) return 0;while(p!=NULL){ if(p->num==j){ h->next=p->next; free(p); return 1;} h=p;p=p->next; } return 0;} //添加信息// void append(){ struct Node *p; FILE *fp; fp=fopen(“1.txt”,“at+”); if(fp==NULL) { printf(“写文件出错,按任意键返回.n”);getchar();exit(1); } printf(“请输入要添加的火车票的信息:火车编号,起点和终点,出发时间,车票价格,剩余票数:n”);scanf(“%d%s%s%d%d”,&p->num,p->name,p->time,&p->price,&p->amount);fprintf(fp,“%d %s %s %d %dn”,p->num,p->name,p->time,p->price,p->amount);getchar();fclose(fp);} //数据的统计// void count(struct Node *h){ struct Node *s;s=h;int i,j,k,n=0;printf(“*****************************************************************************n”); printf(“tt 请选择您要统计项目的序号:n”); printf(“tt 1.车票价格n”); printf(“tt 2.剩余票数n”);printf(“tt 0.退出界面n”); scanf(“%d”,&i);switch(i) { case 1: printf(“请输入您要统计车票的价格的标准:”); scanf(“%d”,&j); printf(“tt 请选择低于或高于标准:n”); printf(“tt 1.价格低于%d的个数n”,j); printf(“tt 2.价格高于%d的个数n”,j); scanf(“%d”,&k); if(k==1) { for(s=h->next;s->next!=NULL;s=s->next) if(s->price n++; printf(“车票价格低于%d的个数有%d个.n”,j,n); } else { for(s=h->next;s->next!=NULL;s=s->next) if(s->price>j) n++; printf(“车票价格低于%d的个数有%d个.n”,j,n); } break; case 2: printf(“请输入您要统计剩余票数的数量:”); scanf(“%d”,&j); printf(“tt 请选择低于或高于所输票数:n”); printf(“tt 1.票数低于%d的个数n”,j); printf(“tt 2.票数高于%d的个数n”,j); scanf(“%d”,&k); if(k==1) { for(s=h->next;s->next!=NULL;s=s->next) if(s->amount n++; printf(“剩余票数低于%d的个数有%d个.n”,j,n); } else { for(s=h->next;s->next!=NULL;s=s->next) if(s->amount>j) n++; printf(“剩余票数高于%d的个数有%d个.n”,j,n); } break; case 0:break; } } //保存用户和密码到文件2.txt中// void save_user(){ char file[10]=“2.txt”;FILE *fp;char name[20];char pwd[10];fp=fopen(“2.txt”,“at+”);if(fp==NULL){ printf(“n写文件出错,按任意键退出.n”); getchar();exit(1);} printf(“请输入用户名:”); scanf(“%s”,name);printf(“请输入密码:”); scanf(“%s”,pwd); fprintf(fp,“%s %sn”,name,pwd); getchar(); fclose(fp); printf(“用户注册成功!n”);} //检验用户和密码是否匹配// int check(char *name,char *pwd){ char name1[20];char pwd1[10];FILE *fp;char file[10]=“2.txt”;if((fp=fopen(“2.txt”,“rt”))==NULL){ printf(“读文件出错,按任意键退出!n”); getchar(); exit(1);} while(!feof(fp)){ fscanf(fp,“%s %s”,name1,pwd1); if(strcmp(name1,name)==0&&strcmp(pwd1,pwd)==0) return 1;} return 0;} //数据排序// void sort(struct Node *h){ struct Node *s,*p,*m,*n;int t,t1,t2,t3;char s1[20];char s2[10]; printf(“车票价格由小到大排序如下:n”);for(s=h->next;s->next!=NULL;s=s->next)for(p=s->next;p->next!=NULL;p=p->next) if(s->price>p->price) { t1=s->num;s->num=p->num;p->num=t1; t2=s->price;s->price=p->price;p->price=t2; t3=s->amount;s->amount=p->amount;p->amount=t3; strcpy(s1,s->name);strcpy(s->name,p->name);strcpy(p->name,s1); strcpy(s2,s->time);strcpy(s->time,p->time);strcpy(p->time,s2); } print(h);printf(“nn剩余车票数量由多到少排序如下:n”);for(s=h->next;s->next!=NULL;s=s->next) for(p=s->next;p->next!=NULL;p=p->next) if(s->amount amount) { t1=s->num;s->num=p->num;p->num=t1; t2=s->price;s->price=p->price;p->price=t2; t3=s->amount;s->amount=p->amount;p->amount=t3; strcpy(s1,s->name);strcpy(s->name,p->name);strcpy(p->name,s1); strcpy(s2,s->time);strcpy(s->time,p->time);strcpy(p->time,s2); } print(h);} void main(){ struct Node *head,*p;int i,j,k;head=(struct Node *)malloc(sizeof(struct Node));head->next=NULL;char name[20];char pwd[10];printf(“n***************欢迎进入火车票管理系统******************n”);printf(“tt 1.用户登录n”);printf(“tt 2.用户注册n”);printf(“tt 0.退出系统 n”);printf(“请输入所选序号:”);scanf(“%d”,&k); switch(k){ case 1: printf(“请输入用户名:”); scanf(“%s”,name); printf(“请输入密码:”); scanf(“%s”,pwd); if(check(name,pwd)) { printf(“密码正确.n”); do { printf(“nntt*********************欢迎进入火车票管理系统***********************n”); printf(“tt 1.录入火车票信息tt 2.添加火车票信息n”); printf(“tt 3.修改火车票信息tt 4.删除火车票信息n”); printf(“tt 5.打印火车票信息tt 6.查询火车票信息n”); printf(“tt 7.统计火车票信息tt 8.火车票销售排行n”); printf(“tt 0.退出系统n”); printf(“请输入您要进入菜单的序号(0-8):”); scanf(“%d”,&i); switch(i) { case 1: printf(“请录入火车票信息nn”); head=creat(); save(head); head=read(); break; case 2: append(); break; case 3: printf(“请输入您要修改的火车票的编号:”); scanf(“%d”,&j); change(head,j); save(head); break; case 4: head=read(); if(delete(head)) { printf(“已正确删除!n”); save(head); } else printf(“要删除的结点不存在!n”); break; case 5: head=read(); print(head); break; case 6: printf(“请输入您要查询火车票的编号(以0结束):”); scanf(“%d”,&j); { p=find(head); printf(“编号 起点和终点 出发时间 车票价格 剩余票数:n”); printf(“%d %10s %5s %10d %6dn”,p->num,p->name,p->time,p->price,p->amount); printf(“请继续输入序号(以0结束):”); scanf(“%d”,&j); } break; case 7: head=read();count(head);break; case 8: sort(head);break; case 0: printf(“************************用!*****************************n”);break; } }while(i!=0); } else printf(“密码错误或用户名不存在.n”); break;case 2:save_user();break;case 0:break;} 谢 谢 使 目录 陈 一、程序分析与设计.......................................................................................................................2 二、流程图.......................................................................................................................................4 三、源程序清单...............................................................................................................................4 四、调试过程.................................................................................................................................15 五、程序有待改进的地方.............................................................................................................19 六、本次实习的收获和建议.........................................................................................................19 附录.................................................................................................................错误!未定义书签。 一、程序分析与设计 (标题四号宋体加黑,正文五号宋体,行间距-固定值18,首行缩进2字符) 1.题目描述 初始化输入:N-参赛院系总数,M-男子竞赛项目数,W-女子竞赛项目数;即要求输入一些基础数据,如院系名称,每个院系参赛选手及选手编号。竞赛项目名称与代号。这些数据存储在文本文件中,不需要每次都单条录入。各项目名次取法有如下几种: 取前4名:第1名得分6,第2名得分4,第3名得分2,第4名得分1; 由程序提醒用户填写比赛结果,输入各项目获奖运动员的信息。 所有信息记录完毕后,用户可以查询各个院系或个人的比赛成绩,生成团体总分报表,查看参赛院系信息、获奖运动员、比赛项目信息等。2.需求分析 根据题目要求应提供键盘式菜单实现功能选择,还应提供信息的输入操作,由于在程序中提供查询功能所以应有显示、查找等操作。3.总体设计 根据上面的需求分析,可以将这个系统的设计分为 1、信息输入模块 2、比赛结果录入模块 3、查询模块。具体校际运动会管理系统分为 信息的输入、结果的输入、学校各个项目的得分的查寻、总体报表的生成。4.详细设计(1)主函数 主函数一般设计的比较简洁,只提供输入,处理和输出部分的函数调用。其中功能模块用菜单方式选择。(2)密码登陆函数 首先进入欢迎界面,提示用户输入密码进入系统,密码输入次数限制为三次,三次输入错误则退出系统,登陆成功显示菜单栏(3)菜单函数 提醒用户根据要求选择功能,以及多次功能选取(4)输入函数 进入该功能后提醒用户输入相应信息,即数据结构,数据结构采用结构体的形式,选手结构体成员包括选手的姓名、编号、各项目的成绩排名、选手所在学院等。(5)查找函数 提醒用户输入运动员的姓名或编号,根据姓名或编号逐一比对信息,若条件满足则输出该选手的数据,若不满足则返回‘你要找的运动员未找到’(6)排序函数 根据运动员的百米成绩进行冒泡排序,并输出结果(7)修改函数 提醒用户输入运动员的姓名,根据姓名逐一比对信息,若找到则提供修改选项,对数据进行覆盖(8)得分计算函数 根据用户输入各项成绩排名,进行得分运算 并得出学院排名(9)删除函数 用于输入信息的删除(10)插入函数 用于输入新的信息(11)保存函数 将用户输入的信息保存到文本文件中(12)显示函数 显示用户保存的信息 二、流程图 三、源程序清单 (此部分采用小五号宋体,行间距-固定值14)#include int size=3;struct student { void input()//输入原始数据// { } void find()//查找函数// { system(“cls”);printf(“t************查找界面************n”);char fs[20];read();printf(“输入你要查找运动员的号码或姓名:”);scanf(“%s”,&fs);for(int i=0;i printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scor } else if(strcmp(stu[i].name,fs)==0){ printf(“你要找的运动员已找到:n”);break;if(strcmp(stu[i].num,fs)==0){ printf(“你要找的运动员已找到:n”);printf(“该生的号码,姓名,100米成绩,铅球成绩,跳高成绩,跳远成绩,系名:n”);printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scoreq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);scanf(“%s%s%d%d%d%d%s”,&stu[i].num,&stu[i].name,&stu[i].scorem,&stu[i].scoreq,&stu[i].printf(“输出运动员号码,姓名,100成绩,铅球成绩,跳高成绩,跳远成绩,系名:n”);for(i=0;i } printf(“该生的号码,姓名,100米成绩,铅球成绩,跳高成绩,跳远成绩,系名:n”);printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scor } } else { } printf(“你要找的运动员未找到:n”);printf(“该运动员缺赛或不存在!”);break;break;eq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);void paixu()//排序函数// { } void xiugai()//修改函数// { printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scorsystem(“cls”);printf(“t************修改界面************n”);char ch2[20],c;char num[10],name[20];int scorem,scoreq,scoreg,scorey,i;char ximing[20];printf(“原始数据:n”);/*for(int i=0;i system(“cls”);printf(“t************排序界面************n”);printf(“对一百米的成绩排序:n”);for(int i=0;i } printf(“排序后:n”);for(i=0;i } if(stu[i].scorem } temp=stu[i];stu[i]=stu[j];stu[j]=temp; eq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);*/ read();printf(“输入你要修改运动员的姓名:”);scanf(“%s”,ch2);for(i=0;i if(strcmp(stu[i].name,ch2)==0){ printf(“1.修改号码n2.修改姓名n3.修改100米成绩n4.修改铅球成绩n5.修改跳高成绩n6.修改跳远成绩n7.修改系名n”); scanf(“%d”,&c);switch(c){ case 1: { printf(“请输入你修改的运动员号码:”);scanf(“%s”,&num);strcpy(stu[i].num,num);break;} case 2: { printf(“输入你修改的运动员姓名:n”);scanf(“%s”,&name);strcpy(stu[i].name,name);break;} case 3: { printf(“输入你修改的运动员100米成绩:”);scanf(“%d”,&scorem);stu[i].scorem=scorem;break;} case 4: { printf(“输入你修改运动员铅球成绩:”);scanf(“%d”,&scoreq);stu[i].scoreq=scoreq;break;} case 5: { printf(“输入你修改运动员跳高成绩:”);scanf(“%d”,&scoreg);stu[i].scoreq=scoreq;break;} case 6: { } } printf(“输入你修改运动员跳远成绩:”);scanf(“%d”,&scorey);stu[i].scorey=scorey;break;case 7: { } default: } printf(“修改后的运动员数据:n”);for(int i=0;i if(stu[i].scoreq==1)y=3;else if(stu[i].scoreq==2)y=2;else if(stu[i].scoreq==3)y=1;else y=0;printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scorread();printf(“各系的得分总分排序:n”);for(i=0;i if(stu[i].scorem==1)x=3;else if(stu[i].scorem==2)x=2;else if(stu[i].scorem==3)x=1;else x=0;eq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);*/ system(“cls”);printf(“t************得分界面************n”);int x,y,z,w,o,p,q,i;char ch1[20]=“ruanjian”,ch2[20]=“shumei”,ch3[20]=“guangdian”;printf(“原始数据:n”);/*for(int i=0;i } } if(stu[i].scoreg==1)z=3;else if(stu[i].scoreg==2)z=2;else if(stu[i].scoreg==3)z=1;else z=0;if(stu[i].scorey==1)w=3;else if(stu[i].scorey==2)w=2;else if(stu[i].scorey==3)w=1;else w=0;for(i=0;i } if(strcmp(stu[i].ximing,ch1)==0){ } else if(strcmp(stu[i].ximing,ch2)==0){ } else if(strcmp(stu[i].ximing,ch3)==0){ } q=x+y+z+w;printf(“光电系总得分:%dn”,q); p=x+y+z+w;printf(“数媒系总得分:%dn”,p);o=x+y+z+w;printf(“软件系总得分:%dn”,o);void shancchu()//删除函数// { printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scorread();printf(“输入你要删除的运动员的姓名:n”);scanf(“%s”,&ch1);for(i=0;i if(strcmp(stu[i].name,ch1)==0){ for(int j=i;j } { } } stu[j]=stu[j+1];printf(“删除后的运动员数据:n”);for(i=0;i void charu()//插入函数 system(“cls”);int a;printf(“t************插入界面************n”);printf(“请输入要插入的运动员个数:”);scanf(“%d”,&a);for(int j=0;j } printf(“输入要插入的运动员数据:n”);printf(“号码:”);scanf(“%s”,&stu[size].num);printf(“姓名:”);scanf(“%s”,&stu[size].name);printf(“100米成绩:”);scanf(“%d”,&stu[size].scorem);printf(“铅球成绩:”);scanf(“%d”,&stu[size].scoreq);printf(“跳高成绩:”);scanf(“%d”,&stu[size].scoreg);printf(“跳远成绩:”);scanf(“%d”,&stu[size].scorey);printf(“系名:”);scanf(“%s”,&stu[size].ximing);for(int i=0;i for(int j=i+1;j if(stu[i].scorem } temp=stu[i];stu[i]=stu[j];stu[j]=temp;size++;printf(“插入后运动员数据:n”);for(int i=0;i } void save(){ } void read(){ } printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scor} fclose(fp); //关闭文件 eq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);fscanf(fp,“%st%st%dt%dt%dt%dt%sn”,&stu[i].num,&stu[i].name,&stu[i].scorem,&stu[i].scoreq,&stu[i].scoreg,&stu[i].scorey,&stu[i].ximing);for(int i=0;i if((fp=fopen(“e:xiao.txt”,“r”))==NULL){ } fscanf(fp,“运动员号码,姓名,100成绩,铅球成绩,跳高成绩,跳远成绩,系名:n”);printf(“打不开文件Cannot open the filen”);return; //若打不开则返回菜单 //为输出打开一个二进制文件,为只fprintf(fp,“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].fclose(fp); //关闭文件 scoreq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);printf(“保存成功....Save the file successfully!n”);FILE *fp; //定义指向文件的指针 //char outfile[20];//printf(“输出文件例如:c:score Enter outfile name,for example c:scoren”);//scanf(“%s”,outfile);if((fp=fopen(“e:xiao.txt”,“w”))==NULL){ } printf(“n保存中...Saving the file......n”);//fprintf(fp,“运动员号码,姓名,100成绩,铅球成绩,跳高成绩,跳远成绩,系名:n”);for(int i=0;i //若打不开则返回菜单 //为输出打开一个二进制文件,为只 //保存数据到文件函数 printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scorsave();eq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);写方式 写方式 int login(char password[]){ //密码校对函数*********** static char key[10]=“12345”;if(strcmp(password,key)==0)return 1;else return 0;} void Logon(){ } if(s==0){ count++;while(count!=3){ printf(“请再次输入密码:n”);scanf(“%s”,password);s=login(password);if(s==1)char a;printf(“n”);printf(“****************欢迎进入校运动会管理界面****************n”);printf(“********************************************************n”);printf(“********************登陆请按回车键**********************n”);printf(“********************************************************n”);printf(“n”);scanf(“%c”,&a);if(a=='n'){ FILE *fp;char password[10];int count=0,s;printf(“您有三次输入机会!nn”);printf(“请输入密码:n”);scanf(“%s”,password);s=login(password);if(s==1){ fp=fopen(“C:UsersAdministratorDesktop实训password.txt”,“w”);fprintf(fp,“%s”,password);fclose(fp);system(“CLS”);printf(“密码正确!n”);printf(“********************************************************n”);printf(“***************************欢迎进入*********************n”);printf(“********************************************************nnn”); //比较输入字符和系统设定的密码是否相同 } } } } { fp=fopen(“C:UsersAdministratorDesktop实训fprintf(fp,”%s“,password);fclose(fp);system(”CLS“);printf(”密码正确!n“);password.txt”,“w”);printf(“********************************************************n”);printf(“***************************欢迎进入*********************n”);printf(“********************************************************n”);} if(s==0)count++;return;if(count==3)printf(“你已经错误输入3次,系统退出!n”);exit(0);else exit(1);void menu(){ int ch1;char ch2;struct tm *pt;/*定义时间结构体*/ time_t t;t=time(NULL);pt=localtime(&t);/*读取系统日期并把它放到结构体中*/ do{ { printf(“tt当前系统日期:%d-%d-%dn”,pt->tm_year+1900,pt->tm_mon+1,pt->tm_mday);printf(“======================菜单=====================n”);printf(“ 1.输入 printf(” 3.排序 printf(“ 5.得分 printf(” 7.插入 printf(“ 9.显示 2.查找 4.修改 6.删除 8.保存 n”);n“);n”);n“);/*显示当前系统日期*/ 0.退出n”);printf(“=n”);printf(“请选择功能<1-8>:[ ]bb”);//getchar();scanf(“%d”,&ch1);switch(ch1) } } case 1: input();break;find();break;paixu();break;xiugai();break;defen();break;shancchu();break;charu();break;save();break;read();break;exit(0);printf(“未进行任何操作!”);case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 0: default: printf(“n”);printf(“想要继续操作请按yn”);getchar();scanf(“%2c”,&ch2); //条件判断 }while(ch2=='y'); void main(){ } system(“color 3f”);//Logon();menu(); 四、调试过程 在程序运行的过程中,出现了很多的错误。有很复杂的问题,也不乏许多低级的错误。在写入文件的时候,首先我用的是fwrite,而在读入文件的时候用的是fread,后来才发现这两个语句都只是对二进制的文件进行操作,实际上我们要用到的fscanf、fprintf这两个语句。修改完的代码 FILE *fp;//定义指向文件的指针 if((fp=fopen(“e:xiao.txt”,“r”))==NULL) //为输出打开一个二进制文件,为只写方式 fscanf(fp,“%st%st%dt%dt%dt%dt%sn”,&stu[i].num,&stu[i].name,&stu[i].scorem,for(int i=0;i } fscanf(fp,“运动员号码,姓名,100成绩,铅球成绩,跳高成绩,跳远成绩,系名:n”);printf(“打不开文件Cannot open the filen”);return; //若打不开则返回菜单 &stu[i].scoreq,&stu[i].scoreg,&stu[i].scorey,&stu[i].ximing);printf(“%st%st%dt%dt%dt%dt%sn”,stu[i].num,stu[i].name,stu[i].scorem,stu[i].scoreq,stu[i].scoreg,stu[i].scorey,stu[i].ximing);} fclose(fp); //关闭文件 做菜单功能多次选择时,令用户输入字符进行选择,然而程序总是退出,后来才知道‘n’也被算入用户输入的字符内,要在字符输入后添加getchar()才能避免菜单失效 做显示函数,屏幕显示异常,总是反复显示相同数据和乱码,原来是结构体初始化,当中的数组已经存储了数据,在显示时与函数同时输出了,要再定义一个相同的数组应用它输出。(1)登陆 (2)菜单 (3)输入 (4)查找 (5)排序 (6)修改 (7)得分 (8)删除 (9)插入 (10)保存 (11)退出 五、程序有待改进的地方 六、本次实习的收获和建议 通过这次课程设计我得出一个结论:知识必须通过应用才能实现其价值!有些东西以为学会了,但真正到用的时候才发现是两回事,所以我认为只有到真正会用的时候才是真的学会了。同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说指针。编程时要养成良好的风格,注意相同内容的缩进和对齐。这样做,可以使程序代码出错的情况下,可以快速并且便捷的查找到错误的行,利于很好的修改。 在整个设计中我懂得了许多东西,也培养了我独立工作的能力,树立了对自己工作能力的信心,相信会对今后的学习工作生活有非常重要的影响。而且大大提高了动手的能力,使我充分体会到了在创造过程中探索的艰难和成功时的喜悦。虽然这个设计做的也不太好,但是在设计过程中所学到的东西是这次课程设计的最大收获和财富,使我终身受益。 在本次实践中,给我印象最为深刻的是在文件删除程序的编译过程中,这个程序将是关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,但是我鼓起勇气,到处查找资料,终于让我实现了这个函数,谢谢给我指点迷津的朋友和同学。对我而言,知识上的收获重要,精神上的丰收是可喜的。挫折是一份财富,经历是一份拥有。这次实际操作必将成为我们人生旅途上一个非常美好的回忆! 火车票管理系统可行性报告 一.引言 学习《面向对象程序设计》课程必须重视实践环节,即通过C#结合实际需求开发应用程序。本次课程实习选择使用C#开发数据库应用程序,它能将所学的C#整合SQL Server数据库知识,形成与应实际紧密结合的连贯整体,进一步加深学生对C#基础语法的理解,加强对WinForms编程的认识,提高应用ADO.NET这一.NET中数据库驱动解决方案核心技术的能力,为将来的软件设计工作打下一定的基础。 该课程的实习主要是锻炼学生的实际动手与操作的能力,充分实现理论与实践相结合,从而培养出优秀的学生! 1.摘要 系统名称: 火车票管理系统 系统功能: 实现管理员对系统的增删改查等一系列的功能,让客户可以订票、退票等,该系统只要实现简单的操作功能。 2.背景 扬州环境资源职业技术学院1012网络班小组成员在C#面向对象程序设计该课程的实训周内进行的课程实训,借此提高学生的动手能力,理论与实践相结合的能力;该系统主要是在Visual Studio C# 2005的基础上与SQL数据库相结合而成的面向对象的程序设计系统。 二.系统开发的背景、必要性及意义 1.现行系统调查研究 (1)组织机构:扬州环境资源职业技术学院 1012网络班;指导老师:陈彦(2)实训时间:2011年12月26日至2012年1月6日 (3)小组成员:徐涛平(组长)、,孙淑茵、孙垚垚、,夏盼盼、,柏铭慧、,华飞龙、,陈龙、,顾汉明 (4)成员任务:徐涛平、,孙垚垚、,夏盼盼、,柏铭慧、,华飞龙、,陈龙、,顾汉明负责系统相关文档的编写;,柏铭慧负责前期的数据库设计;孙淑茵负责设计后期与系统相连接的数据库DB的设计,并负责系统的编码编写。 (5)计算机应用情况:台式机装有Visual Studio C# 2005和SQL数据库 2.需求调查和分析 对于现在网络的迅速发展,人们越来越关注网络。人们在网络上进行交易,购物,订餐等。在网上进行订票也越来越受人们的欢迎。鉴于这种情况,本人孙淑茵想要开发一个类似的系统,故而有了现在的火车票管理系统。 该系统由于是本人的初次尝试开发,所以功能比较的简单,还存在不足之处。 三.可行性分析 1.系统运行可行性分析 该系统只需要一台装有Visual Studio C# 2005和SQL数据库的的电脑就可以进行运行,对于企业来说,这是最简单的、最实用的系统了;对于人员来说,不需要花费大量的金钱进行人员的培训,只需要招聘一个相关专业的计算机人员,就可以对系统进行操作。2.技术可行性 火车票管理系统功能简单,对人员要求以及技术要求不高,在这方面,只需要一个计算机相关专业的人员就可以操作系统,在技术上完全可以进行。3.经济可行性 在经济上,不需要额外的费用,只需要付费开发人员即可,可以说是一劳永逸,在后期,不需要企业花费费用,只需要技术人员进行定期的维护即可,在经济上完全可行。 四.系统功能简单介绍 1.数据库 火车票管理系统连接的数据库主要是SQL数据库,数据库的名称为DB.mdb,它包括了Stype表、Train表和UserInfo表三张表,由于时间匆忙,所以只有这三张表,进而组成与系统相连接的数据库。详见下图4.1 图4.1 2.系统功能介绍 火车票管理系统功能比较简单,管理员可以对系统进行增删改查,而一般的浏览者就可以对系统进行相应的查票、订票、退票操作,而不能像管理员那样对系统进行增删改查等操作,从而保证了系统的安全性。下图是系统的相关截图,如图4.2、4.3所示: 图4.2 图4.3 五.结论 在2011年12月26日至2012年1月6日实训期间,小组成员团结协作,共同努力,完成了火车票管理系统的开发,在这个过程中每个成员的努力都市值得褒奖的,尤其是负责代码编写的孙淑茵为我们的系统完成与完善更是值得奖励的。 火车票管理系统功能简单,实现方便,但也耗费了人力物力与心力,能在短时间内开发出这样一个的系统,我们的努力是值得肯定的,但是这个系统还存在着不足之处,有望在以后的日子里,对系统进行改善和维护。 六.说明 在这里,对相关的问题做一些说明: 1.我们是软件技术基础实训和C#课程实训前后进行的,软件技术基础实训在前,分组也是在软件技术基础实训期间分的,相关的文档也是在此期间完成的,代码也是在此期间编写完成,只是比较不完善,而且在软件技术基础实训期间小组成员负责前期数据库设计出的数据库并不能用,都是中文,并且表与表之间没有相关的联系,所以负责代码编写的孙淑茵就自己设计了一个数据库DB。 2.在后来的C#实训期间,小组成员孙淑茵自己对软件技术基础实训期间不完善的火车票管理系统进行了改进,在陈彦老师的指导下,才有了后来的完善的火车票管理系统,可以说这个火车票管理系统是孙淑茵同学的私有产物,与小组其他成员关系不大,在此说明一下。第三篇:C语言课程设计火车票系统源代码
第四篇:校运动会管理系统报告C语言(含完整代码)
第五篇:火车票管理系统可行性报告(本站推荐)