资源描述
摘 要
C是一种计算机程序设计语言,可以作为系统设计语言编写系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件应用程序,因而它应用范畴辽阔。本系统是依照学校图书管理工作需要,通过C语言开发一种图书管理系统来实现对图书信息进行有效、精确管理。整个系统从简便、实用规定出发,完毕图书管理全过程,涉及图书信息采集,图书插入、删除、借阅、归还、显示、输出等功能。
本文重要简介了本课题开发背景,所要完毕功能和开发过程。系统阐明了系统设计思路、总体设计、各个功能模块设计与实现办法。
核心词:图书管理系统, C语言,信息采集模块
目 录
1 设计目及内容规定 1
1.1 设计目………………………………………………………………… 1
1.2 内容规定…………………………………………………………………1
2 系统构造设计 2
3 系统详细设计 3
3.1 系统主界面设计………………………………………………………… 3
3.2 定义 构造办法……………………………………………………3
3.3 定义 办法…………………………………………………………3
4运营成果及分析…………………………………………………………4
总 结 6
参照文献 7
源程序 8
1系统背景意义
1.1系统开发目
随着经济发展,交通运送越来越便捷,为了提高效率,减轻劳动强度,设计开发高效汽车信息查询系统就显得颇为重要。汽车售票管理中包括许多内容,有订票管理问题,车票发布问题,顾客登录问题等等。这次C#大作业运用VS开发工具和SQL Server数据库系统来汽车票务信息管理系统。该系统重要目是实现车站网上售票工作,可以满足普通顾客售票基本规定,涉及登录、查询、订票、退票等模块。
1.2同类产品概况
车票管理涵盖了咱们出行方方面面,全国当前有多家网站经营汽车票销售管理,例如畅途网、坐车网、12308等,这些网站重要面向全国顾客,与多家售票站点合伙,多是某些大都市之间客车,县级之间汽车信息很少有。而当前从总体上看大某些中小汽车站官网已有了订票功能,弥足了它们局限性。购票流程也是大同小异,顾客登录之后选取始发站、目站、出发日期,查阅车票信息,拟定后付款即可,这时个人中心即有了自己购票信息,若要退票则选取退订即可,操作环节流畅,个人体验也较好。
1.3与同类产品比较
这次车票订购管理系统实现了与同类产品同样查票、购票、退票基本功能,长处是操作简朴,已经能满足票务管理需求,退票也遵循了原子性操作,退票之后系统将之添加到票库中。固然缺陷是本次系统重要是票务管理模仿,在细节上无法与同类产品相比较,例如缺少了注册顾客,购票付款,退票返钱环节,并且是一款window下客户端产品,少了同类产品网页版灵活性,固然其她系统如Linux,mac OS是无法运营本系统。
2. 系统重要设计
2.1系统总体功能模块
车票重要划分为三个某些:顾客管理,车票查询,车票管理三个功能模块。
车票管理系统
顾客管理模块
车票查询模块
车票管理模块
三个模块完毕各自功能。
顾客管理模块
顾客登录
信息提示
密码验证
顾客管理模块:顾客可以依照自己帐号密码进行系统登录,若登录失败系统则给出提示信息。
车票查询模块,顾客可以选取出发日期,出发站,目站来查询车票信息并订购自己车票。
车票订购
车票查询模块
车票查询
系统提示
信息输入
车票管理模块:用于对顾客已经订购车票管理。
车票管理模块
车票退订
程序流程图重要如下所示:
开始
登录界面
检核对的性
N
Y
系统主界面
车票退订
车票订购
车票查询
结束
退出
2.2数据库设计
数据库设计了三张表,users,ticket和myticket表。
users表达顾客表,存储系统中存在顾客名和密码,如下所示:
ticket表存储汽车班次详细信息,具有始发站,终点站,车次,发车时间,到达时间,票价,剩余票数等信息,如下:
表名:ticket
myticket表记录所有顾客订购汽车车票信息,具有顾客名,出发站,到站,出发日期,票价等信息,如下:
表名:myticket
出发日期
各个实体间依赖关系如下:
顾客名
顾客名
我车票表
密码
查阅
票价
顾客表
车次
始发站
购票
终点站
票数
车票表
到达时间
出发时间
票价
2.3使用重要技术
本次C#大作业使用了sql server来实现数据库设计,VS来实现系统编码。用了数据库及数据库表创立技术,C#模块化编程,在系统与数据库之间用了三层架构,将数据库连接进行了封装,避免了代码冗杂并实现了完全对对象操作,面向对象设计思想也得到了较好应用,在代码编写过程中还运用了调试技术。
2.4系统安全性
系统设计了登录界面,每个合法顾客有顾客名及一种密码,只有当顾客输入对的顾客名及密码组合后才可以对学生信息进行操作,否则给出登录错误提示信息。代码中也设立了各种语法检查,避免不必要异常抛出。
3. 系统实现
3.1系统重要类设计
本次系统设计用了三个类User,Ticket和Myticket。User类重要相应于数据库里users表,成员有顾客id,顾客名userName,顾客密码password;
User
Private int userId;
Private string userName;
Private string password;
Ticket类相应于ticket表,成员有始发站startStation,终点站arriveStation,车次carNumber等等;
Ticket
Private string startStation;
Private string arriveStation;
Private string carNumber;
Private string startTime;
Private string arriveTime;
Private int tickePrice;
Privatec int poll;
Myticket类设计相应于数据库中myticket表格中数据,成员有顾客名uname,出发站goStation,到达站toStation,出发日期goDate,票价ticNum,车次carNu;
Myticket
Private string uname;
Private string goStation;
Private string toStation;
Private string goDate;
Private int ticNum;
Private string carNum;
在类设计中,以上三个类每个成员都进行了重构和封装字段操作,以便其她函数调用与访问,三个类封装在了以Model命名类库中,其她类库使用只需添加引用即可,以便了操作。
3.2功能模块设计与实现
本系统重要设计了四个模块,如下图:
Model模块包括了本次程序所需要所有类,有Ticket,User和Myticket,她们在前面类设计已经尽心了详细简介。
DAL模块负责数据库连接,具有四个C#文献,DBHelperForsql重要实现底层数据库连接,包括增删改查函数,UserService实现顾客登录时连接数据库顾客名和密码检查,TicketService实现了查询数据库中车票信息,可以向数据库中添加和减少车票,MyticketService实现向个人顾客数据库车票中添加删除等操作。
BLL模块是DAL模块与TicketManager模块之间连接层,实现了DAL模块每个类中定义函数,在TicketManager模块中可以直接调用。
TicketManager模块是系统主模块,由三个Form窗体构成,第一种窗体位登录窗口,检查顾客登录名密码对的性并给出错误提示,登录进去之后直接跳转至购票查询主窗体,在主窗体中点击“我购票信息”可以进入第三个已购票信息窗体,在这里可以点击退订进行退票。成果演示如下:
一方面运营会进入登录页面,
在窗口中输入顾客名和密码,例如密码输入错误,会给出弹窗信息,
对的输入之后,会进入订票系统主界面,在窗口中选取日期,始发站和终点站点击查询,这时会显示出车次信息,选取好自己车次点击订票若尚有剩余车票则会显示出订票成功,此时显示剩余票数为32,
这是在点击“我订票信息”,会弹出已经订购过车票,
选取自己订购车票点击“退订”按钮,会将已经购买车票返回给系统,
这时再在主界面点击查询,会发现票数剩余33。
总结
本次车票管理系统一方面实现了顾客登录验证,并在安全性方面给与了一定考虑,在界面功能上也基本实现了购票流程模仿。在界面设计上竭尽所能做到排版简洁美观,操作简朴易上手,已经能满足票务管理需求,
对大某些顾客来说可以纯熟使用本系统。固然本次系统毕竟是票务管理
模仿,在诸多细节把握上还是很难与商业化大型购票网站相提并论,
例如灵活性,移植性问题等,并且也无法实现网银真正接入付款,在这些
方面还是需要在后来开发过程中多多考虑。
本次C#大作业耗费了周六周日两天时间来完毕代码编写与测试,又用
了周一周二两个下午进行文档编写,虽然耗费了不少时间,但最后还是自
己一种人完毕了这个小项目,尽管功能不是那么完善,但付出汗水之后的确
有不少收获,但愿在后来时间里能多加锻炼自己代码编写能力,在后
续可以添加更多功能。
C#这门课之后才感觉所传非虚,虽然有点难上手 ,但教师大某些会按着推荐教材按部就班讲,蒋教师课的确很独特,通过一种个工程案例来让咱们体会其中运用技术。上了两周之后我对这种此前没有体验过教课方式产生了极大兴趣,尽管课堂上有时候会跟不上节奏,但感觉学到了诸多东西,印象最深就是编程序三层架构,此前只是懂得但并不会运用到实际编码中,通过第16周学习我感觉自己水平亟需提高。最后,学习这门课对我最大收获是:动手写程序比只看课本不实践重要得多
参照文献
[1] Bruce Eckel.Java编程思想. 北京:机械工业出版社,
[2] 龚永罡,陈昕.Java程序设计[M]. 北京:清华大学出版社,
[3] 刘兆宏,郑莉,陈建等. Java语言程序设计案例教程[M].北京:清华大学出版社,
[4] 王舜燕、钟珞.Java编程办法学[M].北京:北京邮电大学出版社,
源代码:
#include<stdio.h> ///宏定义函数
#include<string.h> //串操作及内存操作函数
#include<stdlib.h> /////调用系统函数
#include<time.h> ///时间库函数
#include<conio.h> ///输入输出函数
#define N 1000 //宏定义多条记录
typedef struct TICKET ////定义新构造体TICKET
{
char num[10]; //车次编号
char hour[3]; //时间,,小时
char min[3]; //分钟
char from[10]; //起始站
char to[10]; //终点站
float hours; //车程实际时间
int max; //最大车载容量
int now; //已售票数
}CLASS;
int class_num=0; ///初始班次总数为0
CLASS records[N]; // 多条记录
int system_time(); //系统时间
void NewMessage(); //新纪录*录入函数******
void ShowTable1(); //线框调用1,,,不用没次输
void ShowTable2(int i); //线框调用2,,,不用没次输
void Display(); //显示所有函数
void add(); //增长记录
void save(); // 保存函数
void load(); // 按班次查询函数
void search(); //查询函数
void change(); //修改函数**
void quit(); ////////// //退出函数******
void Ticketorder(); // //*售票函数***
void Ticketdelete(); //删除函数*
int menu_select(); //菜单函数*
int whether(int); ////判断时间与否超过函数***
void find(char s1[],char s2[]); //查询函数★//s1为班次//s2为终点站
void deletemessage(); //删除函数
int findnum(char s1[]); //班次查询函数
void get(int,int); //修改及增长班次*
char *menu[]={"*****************欢迎使用车票查询系统*****************",
"\n*******************MENU功能菜单***********************",
"\n◤ ★ 1. 录入班次 ◥",
"\n◆ ★ 2. 显示所有班次 ◆",
"\n◆ ★ 3. 查询班次 ◆",
"\n◆ ★ 4. 增长班次 ◆",
"\n◆ ★ 5. 售票 ◆",
"\n◆ ★ 6. 退票 ◆",
"\n◆ ★ 7. 修改班次 ◆",
"\n◆ ★ 8. 删除班次 ◆",
"\n◣ ★ 9. 退出 ◢"};
/**************************主函数***************************/
void main()
{
system("cls"); //刷屏
while(1) //菜单函数循环
{
switch(menu_select()) //菜单函数*
{
case 1:NewMessage();break; ////新纪录*录入函数******
case 2:Display();break; // //显示
case 3:search();break; //查找函数**
case 4:add();break; // //增长记录
case 5:Ticketorder();break; ////*售票函数***
case 6:Ticketdelete();break; //删除函数*
case 7:change();break; //修改函数**
case 8:deletemessage();break; //////选取调用删除函数
case 9:quit();break; //////退出函数******
}
}
}
/***********************菜单函数**************************/
int menu_select() /////////菜单函数*
{
char s[5]; ///定义要输入数字功能
int c,i;
system("cls"); //刷屏
system("color 09");//变化颜色
for(i=0;i<11;i++)
{
printf("%s",menu[i]); //输出菜单各项)
}
i=0;
while(c<0||c>9) //判断与否是1到9命令
{
printf("\n"); ///输出换行
printf("******************************************************");
printf("\n请选取(1-9):▁▂▃▄▆▇");
scanf("%s",s);
c=atoi(s); //atoi将字符串转换成一种整数值
} ///输出菜单面
return c; ////返回祈求
}
/*******************************录入函数************************************/
void NewMessage() //*录入函数******
{
int i=0,j=5,h; ////
char s[5];
FILE *fp; ////定义文献型指针变量
system("cls"); //刷屏
if((fp=fopen("d:车票管理系统0.dat","rb"))!=NULL) //fopen打开文献
{
printf("车票信息已经存在请选取增长功能!\n");
printf("任意输入则返回菜单\n");
scanf("%s",s);
i=1; //通过是1
}
if(i==0)
{
system("cls"); //刷屏
printf("请输入要录入班次总数:\n");
scanf("%d",&class_num); //指向班次指针
system("cls"); //刷屏
for(i=0;i<class_num;i++)
{
system("cls"); //刷屏
printf("请输入第%d个班次信息:\n",i+1);
h=-1;
for(;h!=i;) ///循环输出
{
printf("请输入班次:\n");
scanf("%s",records[i].num);
for(h=0;h<i;h++)
if(strcmp(records[h].num,records[i].num)==0)
//判断字符串比较与否相等,, 待比较字符串
{
printf("输入错误!该班次已存在!\n");
break; ///返回
}
}
get(i,j); ////修改及增长班次*
j=5;
}
save(); //调用保存函数
}
}
/*******************************显示所有函数********************************/
void Display() //显示所有函数
{
int i,j;
system("cls"); //刷屏
load(); // 调用按班次查询函数
ShowTable1(); //线框调用1,,,不用没次输
for(i=0,j=0;i<class_num;i++,j+=2) /////按班次顺序输出
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
if(whether(i)) //判断时间与否超过函数***
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,
records[i].min, records[i].from,records[i].to,records[i].hours,
records[i].max,records[i].now);
else
printf("|%10s| 已发车 |%10s|%10s|%8.1f|%8d|%8d|",records[i].num,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
}
ShowTable2(j); //线框调用2
printf("\n按任意键继续....\n");
getch(); /////从控制台读取一种字符,但不显示在屏幕上
}
/**********************************打印表头***********************************************/
void ShowTable1() //线框调用1,,,不用没次输
{
int i=2;
system("cls"); //刷屏
printf("**************************MESSAGE车程信息**********************************\n");
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("\n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |\n");
}
/***************************************打印表尾************************************************/
void ShowTable2(int i) //线框调用2。不用没次输。
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
}
/**************************查找函数11**************************/
void search() ////查询调用
{
int i;
char s1[10]={'\0'},s2[10]={'\0'};
system("cls"); //刷屏
printf("1. 按班次查询\n");
printf("2. 按终点站查询\n");
printf("3. 退出\n");
printf("请选取(1-3):\n");
scanf("%d",&i);
load(); // 调用按班次查询函数
switch(i) //多分枝选取语句
{
case 1:printf("请输入要查询班次:\n"); //////s1为班次
scanf("%s",s1);
find(s1,s2); /////调用查找函数222 2
break;
case 2: printf("请输入要查询终点站:\n"); /////s2为终点站
scanf("%s",s2);
find(s1,s2); /////调用查找函数222 2
break;
case 3:break;
default :printf("输入错误!\n");
break;
}
printf("按任意键继续....\n");
getch(); ///从控制台读取一种字符,但不显示在屏幕上
}
void find(char s1[],char s2[])
{
int i,h=0,m;
ShowTable1(); ////调用线框1
if(s2[0]=='\0')
m=1; ///1为无条件执行
else m=0;
for(i=0;i<class_num;i++)
if(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)
////判断字符串比较与否相等,, 待比较字符串
{
printf("\n|----------|----------|----------|----------|--------|--------|--------|\n");
printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,
records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now);
h+=2;
if(m==1)
break;
}
ShowTable2(h); ////调用线框2
if(h==0)
printf("要查找班次不存在!\n");
}
/***********************增长函数****************************/
void add() // //增长记录
{
int i,j=5;
load(); // 调用按班次查询函数
system("cls"); //刷屏
printf("1. 增长班次\n");
printf("2. 返回\n");
printf("请选取(1-2)\n");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
printf("1. 请输入要增长班次:\n");
scanf("%s",records[class_num].num);
for(i=0;i<class_num;i++)
if(strcmp(records[class_num].num,records[i].num)==0)
//判断字符串比较与否相等,, 待比较字符串 判断车次没重复
{
printf("输入错误!\n");
getch(); /////从控制台读取一种字符,但不显示在屏幕上
break;
}
if(i==class_num)
{
get(i,j); ////修改及增长班次*
class_num++; ///使班次数加1
save(); //调用保存函数
}
}
}
/********************************售票函数*****************************/
void Ticketorder() //*售票函数***
{
int i;
char num[10];
system("cls"); //刷屏
printf("1. 售票\n");
printf("2. 返回\n");
printf("请选取(1-2):\n");
scanf("%d",&i);
if(i==1)
{
load(); // 调用按班次查询函数
search(); //查找函数**
printf("请输入要订票班次(若无请输入0):\n");
scanf("%s",num);
for(i=0;i<class_num;i++)
if(strcmp(num,records[i].num)==0)//判断字符串比较与否相等,, 待比较字符串
if(records[i].max>records[i].now&&whether(i)==1)
//判断时间与否超过函数***并且***没超过最大客量
{
records[i].now++; ///使已售暑假1
printf("通向%s班次为%s票订票成功!\n",records[i].to,records[i].num);
save(); //调用保存函数
getch(); /////从控制台读取一种字符,但不显示在屏幕上
break;
}
else
{
printf("该班次已满或已发出!\n");
getch(); /////从控制台读取一种字符,但不显示在屏幕上
}
}
}
/****************************退票删除函数***************************************/
void Ticketdelete() //删除函数*
{
int i;
char num[10];
system("cls"); //刷屏
printf("1. 退票\n");
printf("2. 返回\n");
printf("请选取(1-2)\n:");
scanf("%d",&i);
if(i==1)
{
system("cls"); //刷屏
load(); // 调用按班次查询函数
printf("请输入要退票班次:\n");
scanf("%s",num);
i=findnum(num); //调用班次查询函数
if(strcmp(num,records[i].num)==0) //判断字符串比较与否相等 待比较字符串
if(whether(i)) //判断时间与否超过函数***
{
printf("拟定(Y/N)?");
scanf("%s",num);
if(num[0]=='y'||num[0]=='Y')
{
records[i].now--; //使已售票加1
printf("退票成功!\n");
save(); //调用保存函数
getch(); //从控制台读取一种字符,但不显示在屏幕上
}
}
else
{
printf("该班车已发出,无法退票!\n");
getch(); /////从控制台读取一种字符,但不显示在屏幕上
}
if(i==class_num)
{ printf("输入错误!\n");
getch(); /////从控制台读取一种字符,但不显示在屏幕上
}
}
}
/********************************修改函数*********************************/
void change() //修改函数**
{
char num[10],s[10];
int h=0,j=13,i;
load(); // 调用按班次查询函数
system("cls"); //刷屏
printf("请输入要修改班次:\n
展开阅读全文