软件课程设计--C语言.docx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件 课程设计 语言
- 资源描述:
-
软件课程设计・・C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析) 设计题目:火车订票系统小组成员: 指导教师: 完成时间: 一.需求设计: 1. 每条线路所涉及的信息有:起点、终点、站名、车次、、票价、时间、座位号。 2. 作为示意系统,全部数据可以只放在内存中。 3. 系统能实现的功能和操作如下: ① .查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。 ② .承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客广办理订 票手续,输出座位号:若巳满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排 队候补。 ③ .承办退票业务:根据客户提供的情况(车次、时间、座位号)为客户办理退票手续,然后查 询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办 理订票手续,否则依次询问其他排队候补的客户。 ④ 登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。 ⑤ 统计功能:将每次车的订票,退票结果统计出来。 ⑥ 管理功能:列车管理员可以通过调用函数来查看车票极其用户情况. ⑦ .查询功能:用户可以查询自己需要的车辆信息. 二.总体设计1.程序流程图: 是否是需要的车次 是While循环是否已到头指针 否是否是需要的车站名 是输出所需的信息 是是 错误移动指针 否否 ②程序代码: void inquire。 {struct ticket *p; struct station *q;int t; in+ *o *s;printff'please enter the number:"); scanf(”%d”,&f);/*输入需要的车次*/ printfC'please enter the station:**);scanf("%d",&h);/*输入需要到达的车站名*/ p=t;/*初始化p的值*/while(p=!null) if(p->number==t)(q=p->down; o=p;/*把符合条件的横向链表结点的数据给o*/while(q->next=!headl) {if(q->name==h) {s=q;/*把符合条件的纵向链表的数据给s*/ }q=q->next;/*纵向链表移针*/ }} p=p->next;/*横向链表移针*/} printf(,,%d,,;,%d,';'%d,,/o->nurn/o->nurn2,o->time); /*输出横向链表的数据*/printf("%s","%d","%d","%d",“%d”,s->name,&s->time,&s->money,&s->seat,&s->ma「k); /* 输 出纵向链表的数据*/ goto first;} ③功能说明: 本函数主要提供查询功能.用户输入需要查询的车次和需要到车站名,程序首先遍历横向链表查 找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本 车次的所有信息. 4. Cancel()函数: ① 程序流程图: 输入需要的车次号输入需要到达的车站名 While循环是否需要的车次横向结点值给。 While循环是否是需要的车站名是 使mark的值为0纵向结点值给s 纵向链表移针横向链表移针 当横向链表卜一个指针为空时输出s点的数据 输出。点的数据程序代码; void cancel(){ struct ticket *p;struct station *q; int t;int *o *s; printfC'please enter the number*:"); scanf("%d",&f);/*输入需要的车次*/printfC'please enter the station:"); scanf("%d",&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/ while(p =!null){ if(p->number=t)(q=p->down; 0=p;/*把符合条件的横向链表结点的数据给0*/while(q->next=!headl) {if(q->name=h) (q->mark=0; /*修改 mark 标记*/ s=q;/*把符合条件的纵向链表的数据给s*/} q=q->next;/*纵向链表移针*/}} p=p->next;/*横向链表移针*/} printfC'your ticket has already cancel!");p「intf(”%d”,“%d“,”%d”,o->num,o->num2,o・>time); /*输出横向链表的数据*/ printf("%s",“%d","%d","%d",“%d”,s->name,&s->time,&s->money,&s->seat,&s->ma「k); /* 输 出纵向链表的数据*/ goto first;功能说明: 本函数主要提供退票功能.用户输入需要退票的车次和需要到车站名,程序首先遍历横向 链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标 识是其为0.最后输出所有关于本车次的所有信息. 5. you。函数: ① 程序代码: void you() struct you *head;struct you *p; p=(struct you *)malloc(len);scanf("%d",&p->name,&p->num,&p->numl,&p->fime,&p->timel); goto First;} ② 用户查询代码:(注:本函数用于管理人员查询用户)void find() {struct you *head; struct you *p;int u; scanf("%d",&u);while(p=!null) {if(p->num=u) {s=p;)p=p->next; }} ③ 功能说明: 本函数用于用户输入个人信息,以便管理人员管理.而管理函数只面对管理人员使用,因 此未在用户界面上显示出来. 6. 统计模块: void total() int *p*q;int n; P”;while(p=!null) (while(q->next=!headl) {if (mark= 1) (n=n+l;)q=q->next; } p=p->next;} printff'the number of the booked ticket are :, printf("%d",n); }6.所用变量声明: ① 横向链表结点的结构体: struct ticket{ int num;int numl; int time; struct ticket *next; struct station *down;}; int t;纵向链表结点的结构体: struct station int name; int time; int money; int mark; struct station *next;} ② 用户信息链表结点的结构体: struct you ( int name; int num; int numl; int time; int timel; struct you *next; }四.程序说明书: 木系统用于火车站的车票管理.主要方便用户订票,也可方便管理人员管理车票.当用户看到 用户界面时,可以根据提示选择自己想要的服务,选择后按下回车键,程序便会转到相应的函数进 行.完成后,程序会显示您己经成功的订票或退票.完成后程序会自动回到起始位置. 管理人员也可以很方便的调用本系统包含的查询和统计函数,管理车票情况. 具体说明: 1. 提示程序操作者输入预设的数据. 2. 提示用户进行订票操作. 3. 提示用户进行查询自己需要的车票的操作. 4. 提示用户进行退票操作. 5. 提示用户输入自己的相关信息. /L.程序调试: 本程序分为多模块,为的是方便小组合作.所以各个功能都由函数调用来实现.组员在各自的 编制和调试中基本都实现所需的功能.但在联调的过程中,由于我们使用了大量的传递指针形的函 数,所以在数值的传递上问题很多.分步执行的时候指针的位置很乱!所以让我们遗憾的是联调并 没有成功.我们也会吸取教训,在函数编制时注意数值的传递. 六.运行结果: 输入:2 K717,Beijing,11:00 yuci,12:00,10,0,56 yangyuan】:00,20,0,56 Shijiazhuang,2:00,30,56输入:k717 Shijiazhuang输出:you have already booked the ticket! K717,shijiazhuang,ll:00,3:00,30,56七.程序源代码: #include <stdio.h>#include <string.h> #define null 0#define len sizeof(struct ticket) struct ticket( int num;int numl; int time; struct ticket *next; struct station *down;): int t;struct station/*公共变量声明*/ ( int name; int time; int money; int mark; struct station *next;struct you ( int name; int num; int numl; int time; int timel; struct you *next;struct ticket *in() struct ticket *in() /* 一个返回指针形的函数*/ struct ticket *head;/*头结点*/struct ticket *pl *p2; struct station *sl *s2;int m,n; int i;pl=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*7 scanf(”%d”,&m);/*输入一共所需的车票信息总数*/scanf("%d",&n);/*输入从始发站到终点站共有几站*/ head=null;for(i=0;i<=m;i++) (p2->next=pl; P2印1;pl二(struct ticket )*malloc(len); sl=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/headl=sl=s2; pl->down=sl=s2;/*指向纵向链表的头结点*/scanf(”%dL”%d”,”%d”,&pl->num,&pl->num2,&pl->time); /*输入横向链表的数据*/ for i=0;i<=n,i++ () (s2->next=s2; s2=sl;sl=(struct ticket )*malloc(len);/*建立纵向链表*/ scanf("%s","%d","%d","%d","%d”,sl->name,&sl->time,&sl->money,&sl->seat,&sl->mark);}/*输入纵向链表的数据*/ sl->next=headl; /*纵向链表为循环链表*/按1键 按2键按3键 按4键进入in函数 进入book函数进入inquire函数 进入cancel函数按5键 进入you函数2.总体设计说明: ①.数据结构设计: 程序二数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信 息的数据结构. 车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下 一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次 到站,票价,到达时间,是否己被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0 时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针. 未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排 在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的 车次,起始站,要到的站,时间. 己经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号 码,已购车票的车次,出发时间,到达时间. 车票信息链表示意图: 车次起始站 发车时间downn next p2->next=null;return(head);/*返回头指针*/ goto first;/*返回头指针*/} void book() (struct ticket *p; struct station *q;int t; int *o *s;printf("please enter the number:"); scanf("%d",&f);/*输入需要的车次*/printf(''please enter the station:"); scanf("%d",&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/ while(p=!null){ if(p->number==t)(q=p->down; o=p; /*把符合条件的横向锥表结点的数据给0*/while(q->next=!headl) (if(q->name==h) (if (q->mark=l) printfC'your ticket is unused");else q->mark=l;/*修改 mark 标记*/s=q: s=q: /*把符合条件的纵向链表的数据给s*/ q=q->next;/*纵向链表移针*/ »p=p->next;/*横向链表移针*/ }printfC'your ticket has already booked!"); printfC,%d,,/"%d,7,%d",o->num/o->num2/o->time); /*输出横向链表的数据*/ printf("%s","%d","%d","%d",“%d",s->nQme,&s-汁 ime,&s->money,&s->seat,&s->mark); /* 输 出纵向链表的数据*/goto first; } void inquire() {struct ticket *p; struct station *q;int t; int *o *s;printff'please enter the number;"); scanf("%d",&f);/*输入需要的车次*/printfC'please enter the station:"); scanf("%d",&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/ while(p=!null)( if(p->number==t)(q=p->down; o=p;/*把符合条件的横向链表结点的数据给。*/while(q->next=!headl) if(q->name==h)s=q:/*把符合条件的纵向链表的数据给s*/ }q=q->next;/*纵向链表移针*/ }} p=p->next;/*横向链表移针*/} printf(”%d“,“%d“,”%d”,o->num,o->num2,o->time); /*输出横向链表的数据*/printf("%s";*%d","%d","%d*7%d"w・>name,&s・>time,&s・>money,&s・>seat,&s・>mQrk); /* 输 出纵向链表的数据*/goto first; void cancel()( struct ticket *p;struct station *q; int t;int *o *s; printff'please enter the number:"); scanf("%d",&f);/*输入需要的车次*/printff'please enter the station:"); scanf("%d",&h);/*输入需要到达的车站名*/p=t;/*初始化p的值*/ if(p->number=t)(q=p->down; o=p;/*把符合条件的横向链表结点的数据给0*/while(q->next=!headl) (if(q->name = h) (q->mark=0; /*修改 mark 标记*/ s=q;/*把符合条件的纵向链表的数据给s*/} q=q->next; /*纵向链表移针*/p=p->next;/*横向链表移针*/ }printfC'your ticket has already cancel!"); printf(,,%d,,;,%d";'%d,,/o->num/o->num2,o->time); /*输出横向链表的数据*/ printf("%s","%d","%d","%d",“%d”,s->name,&s->time,&s->money,&s->seat,&s->ma「k); /* 输出纵向链表的数据*/ goto first;void you() { struct you *head;struct you *p; p=(struct you *)malloc(len);scanf("%cr,&p->name,&p->num,&p-〉numl,&p->fime,&p->timel); }goto First; void find() struct you *head; struct you *p;int u; scanfC%dw,&u); while(p=!null){ if(p->num=u){s=p;) p=p->next;} }void total() {int *p,*q; int n;Pf while(p =!null)( while(q->next=!headl)( if (mark=l) (n=n+l;)q=q->next; } p=p->next; printff'the number of the booked ticket are :M); printfC%d\n);Main() (int *t;int c; First: printff'welcome to our ticket system!\nH);printfC'l.intput the data.\nM); /*按 1 键输入数据*/ printfC'2.book the ticket.\n");/*按 2 键订车票*/ printf(n3.inquire the ticketAn"); /*按 3 键查询车票*/ printfC4.cancel the ticket.\nH);/*按 4 键退车票*/printf(H5.input your own data.\nn); /*按 5 谜输入个人信息*/ scanf("%d",&c); switch(c)(case T: t=in(); break; case 2: book(); break; case ‘3’: inquire。; break; case 4: cancel(); break; case 5: you() ; break;default : printfCyou enter an error number\nM); } )八.结束语: 课程设计使我们通过解决一个实际问题,巩固和加深所学课程,提高了我们分析和编写程序的能 力,为我们以后的学习提供了很好的帮助,更为毕业设计和毕业以后从事计算机方面的工作奠定 了基础。 通过两周的学习,我们对已学的专业知识有了比较深刻的认识,同时在查找资料或和其他同学交 流的过程中,发现了一些问题,所以在设计的时候,遇到了很多困难。在对所学的有限知识的理 解和掌握下,在查找资料以及大家共同努力学习和讨论后终于把课题做完。但因为对专业知识没 有很深的认识,所以其中难免有一些是错误的或者是不合理的,希望老师多指教。 在课程设计的过程中,老师的指导对我起了非常大的帮助,在此表示感谢,谢谢各位老师的辛勤 工作! 更多内容: C++P「imer第四版部分习题解答 麻省理工算法导论翻译 浙江大学ACM试题解答(四月) 浙江大学ACM试题解答(三月) 华容道游戏与算法 中国象棋对战程序C语言源代码 三维建筑物图像的二维建模 分段线性骨架 基于图论的图像分割技术 Linux文件系统 分层模型 汉语编程企业管理应用软件可行性研究报告 汉语编程企业管理应用软件需求说明书 计算机专业操作系统课程设计报告 软件可行性报告 软件需求分析报告 两种计算Ack(m,n)的非递归算法 浙江大学计算机复试解答1 浙江大学计算机复试解答2 浙江大学计算机复试解答3 Trackback: http: 下一站名到站时间 票价mark next座位号 未购票用户信息队列: 用户姓名购票的车次 起始站要到的站 达到时间用户姓名 购票的车次起始站 要到的站达到时间 注:座位号包含在车次号中己购票用户信息链表示意图: 用户姓名身份证号码 已购车票的车次号出发时间 到达时间 注:座位号包含在车次号中②算法的设计: 主函数: 利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函 数,实现相应的功能。在主函数开始处做下First标识,以便在其他函数中使用9oto ig句返回 主函数的用户界面。 In()函数: In()函数负责输入各种信息,链表中车票信息的初始值. Book。函数: Book。函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark 值. Inquire。函数: Inquire。函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出. Cancel。函数: Cancel()函数主要负责退票功能.主要是遍历整个链表查找到需要的结点,然后修改 mark的值. you。函数: you()函数主要负责输入用户信息,主要是创建-个单链表,将用户信息放入.并提供管 理人员的查询功能. Find。函数: Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息. TotalQ 函数: Total()函数主要负责统计整个订票系统的情况. 三.详细设计: 1. 主函数: ① 程序代码: Main()(int *t; int c;First: printfC'welcome to our ticket system!\nH); printfC'l.intput the data."); /*按 1 键输入数据*/ printf(tt2.book the ticket.\nH);/*按 2 键订车票*/printfC'3.inquire the ticket.\nH); /*按 3 键查询车票*/ printfC4.cancel the ticketAn");/*按 4 键退车票*/ printf(''5.input your own data.'n"); /*按 5 键输入个人信息*/ scanf("%d",&c);switch(c) (case T: t=in(); break; case 2: book(); break; case 3: inquire。; break; case 4: cancel(); break; case 5: you() ; break;default : printffyou enter an error number'n");}} ② 功能说明: 通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入 实现该功能函数完成用户所需要的功能. 2. In()函数: ①程序流程图: 建立横向链表头结点输入m,n的值 For循环,m是否为0建立结点 向结点输入数据 For循环,n是否为0否 建立纵向结点向结点输入数据 是返回头指针 Goto到用户界面②程序代码: struct ticket *in()/*一个返回指针形的函数*/ ( struct ticket *head; /*头结点*/struct ticket *pl *p2; struct station *sl *s2;int m,n; int i;pl=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/ scanf(”%d”,&m);/*输入一共所需的车票信息总数*/ scanf("%d",&n);/*输入从始发站到终点站共有几站*/head=null; for(i=0;i<=m;i++){ p2->next=pl;P2=pl; pl=(struct ticket )*malloc(len);sl=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/ headl=sl=s2; pl->down=sl=s2;/*指向纵向链表的头结点*/scanf(”%d”,”%d”,”%d“,&pl->num,&pl->num2,&pl->time); /*输入横向链表的数据*/ for(i=0;i<=nj++) (s2->next=s2; s2=sl;sl=(struct ticket )*malloc(len); /*建立纵向链表*/ scanf("%s","%d","%d"「'%d",“%d",sl->name,&sl->time,&sl->money,&sl->seat,&sl->mark);}/*输入纵向链表的数据*/ sl->next=headl; /*纵向链表为循环链表*7} p2->next=null;return(head);/* 返回头指针*/ goto first;/*返回头指针*/} ③功能说明: 通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面. 3. Book ()函数: ①程序流程图: 输入需要的车次号输入需要到达的车站名 While循环是否需要的车次是 横向结点值给。 While循环是否是需要的车站名是 使mark的值为1 纵向结点值给s 纵向链表移针横向链表移针 当横向链表下一个指针为空时输出S点的数据 输出。点的数据Mark是否为1 错误否 是②程序代码: void book() (struct ticket *p; struct station *q;int t; int *o *s;printfC'please enter the number:"); scanf("%d",&f);/*输入需要的车次*/printfC'please enter the station:"); scanf("%d",&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/ while(p=!null){ if(p->number==t)(q=p->down; o=p;/*把符合条件的横向链表结点的数据给0*/ while(q->next=!headl) if(q->name==h)( if (q->mark=l)printfC'your ticket is unused"); elseq->mark=l;/*修改 mark 标记*/ s=q;/*把符合条件的纵向链表的数据给s*/} q=q->next;/*纵向链表移针*/p=p->next;/*横向链表移针*/ }printfC'your ticket has already booked!"); printfC,%d,,;,%d";'%d,,/o->num/o->num2,o->time); /*输出横向链表的数据*/printf("%s","%d","%d","%d","%d”,s->name,&s->time,&s->money,&s->seat,&s->ma「k); /* 输 出纵向链表的数据*/ goto first;} ③ 功能说明: 本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为己定车票.如果mark己经为1则 输出错误信息. 3.inquire。函数: ①程序流程图: 输入需要的车次号输入需要到达的车站名 While循环是否已到空展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




软件课程设计--C语言.docx



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/4540907.html