基于windows系统的JAVA语言订票系统实现课程设计说明书含源程序.docx
《基于windows系统的JAVA语言订票系统实现课程设计说明书含源程序.docx》由会员分享,可在线阅读,更多相关《基于windows系统的JAVA语言订票系统实现课程设计说明书含源程序.docx(16页珍藏版)》请在冰豆网上搜索。
基于windows系统的JAVA语言订票系统实现课程设计说明书含源程序
操作系统课程设计
实验报告
基于windows系统的JAVA语言订票系统实现课程设计
课程设计要求:
基于Windows的课程设计,任务要求为2个Projects,完成一下两个任务及要求:
(1):
进程间的通信、并发(同步或者互斥)、文件读写等要求
(2):
内存管理、DLL、Windows消息机制、IO等等
问题简要描述和设计要求:
(1):
多个进程之间的相互通信
①:
其中一组进程(生产者)从外部获取数据
②:
另外一组进程(消费者)接受并显示数据
(2):
设计并实现这样一个系统。
两组进程的数目自定
问题具体描述和设计要求:
(1):
完成N个生产者和M个消费者之间的并发控制,N、M不低于5,数据发送和接收缓冲区大小不小于10个。
(2):
某个生产者进程生产的消息供K个消费者进程消费。
K《=M。
某些消费进程消费多个生产者生产的消息。
生产者和消费者之间的对应关系可以在程序开始有一个文件中读入,也可以动态调整。
课程设计目的:
(1)掌握并能够灵活使用进程间通信机制
(2)掌握并能够灵活使用同步互斥机制
(3)掌握并能够灵活使用IO技术
课程设计分析:
多个进程之间的相互通信:
(1):
其中一组进程(生产者)从外部获取数据
(2):
另外一组进程(消费者)接收并显示数据
已实现的功能:
1.设计实现基于线程的多任务程序
2.完成生产者消费者程序设计
3.实现线程之间的消息通信程序
未实现的功能:
DLL的功能:
动态链接库的实现,DLL是一个包含可由多个程序同时使用的代码和数据库,DLL不是可执行文件。
动态链接库提供了一种方法使进程可以调用不属于其可执行代码的函数。
函数的可执行代码位于DLL中,该DLL包含一个或多个已被编译、链接并使用他们的进程分开存储的函数。
DLL还有助于共享数据和资源。
多个应用程序可同时访问内存中单个DLL副本的内容。
DLL是一个包含可由多个程序同时使用的代码和数据库。
DLL未实现的原因:
动态链接库虽然跟容易地将更新应用于各个模块,不影响该程序的其他部分,但利用JAVA实现起来难度有点大,而且不会利用JAVA实现动态链接库。
对于当前Windows程序设计的详细分析:
在window课程设计中利用JAVA语言实现一个简单的订票系统。
对于订票系统的详细分析;
(1)需求分析:
需求分析是软件设计的一个重要的环节。
本阶段对订票系统的应用情况作全面调查,以确定系统目标,并对系统所需要的基础数据以及数据处理要求进行分析,从而确定用户的需求。
用户对系统的需求我们从以下几方面进行分析。
①功能需求:
售票系统实现一下功能:
a:
查询:
分为对车次信息的查询和客户对已订车票信息的查询。
要求:
1)对车次的查询,可以按照发车车次进行查询;2)车次信息包括:
车号、出发地、目的地、发车日期、开出时刻、票价。
3)车次信息只能查询不能修改。
b:
添加车票:
通过查询系统,客户根据自己的需求找到满意的车次,再次输入个人信息后直接通过订票系统预定以选中的车票。
要求:
售票记录应包括:
会员名、车号、发车日期、订票数量、总价。
c:
退票:
可退票,通过查询系统,客户可根据自己的车号找到自己订票信息,通过退票模块退去已购车票。
②数据需求:
信息需求,即在系统中需要处理拿些数据。
根据车站订票系统的分析,本系统的信息需求如表所示:
信息输入输出
信息输入
信息处理
信息输出
用户输入所需车次
检索系统文件
符合用户需求的车次及相关
信息
用户输入个人信息及所需
购的车票信息
更新系统中的订票信息,
将新信息存入文件
操作反馈(如找零)
对于系统总体设计:
a:
系统软件结构设计:
本订票系统可分为信息查询、网上订票、退票三部分。
其中查询信息又可分为车次查询和订票查询两个部分。
层次图如图所示:
订票系统的层次图
b:
系统流程图:
系统顶层流程图如图所示:
系统流程
车次信息查询系统流程图
订单信息查询系统流程图
退票系统流程图
c.程序流程图
本系统主界面为用户设计了三个功能操作以供选择:
查询,订票,退票。
另外,为方便用户,还将“退出系统”也单另列了出来,用户可以根据需要触发不同事件。
其处理流程如图所示。
(1).售票的系统主处理流程
售票员系统主程序流程图
(2).车次信息查询处理流程
车次信息查询程序流程图
(3).车票处理流程
售票程序流程图
(4).车票信息查询处理流程
订票信息查询模块程序流程图
(5).退票模块处理流程
退票模块程序流程图
详细的代码分析:
主页面:
代码:
finaldisplaydis=newdisplay();finalTuipiaotui=newTuipiao();
JFrameframe;Buttonb1,b2,b3;Panelp1;
frame=newJFrame("订票系统启动:
");
frame.setSize(500,400);frame.setLocation(480,380);
//frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.LIGHT_GRAY);frame.setResizable(false);
frame.setLayout(newBorderLayout(5,5));
p1=newPanel(newGridLayout(5,5,35,15));
frame.add(p1,BorderLayout.CENTER);
b1=newButton("订票");b2=newButton("退票");b3=newButton("查询");
p1.add(b1);p1.add(b2);p1.add(b3);
订票页面:
对车次信息的查询,系统提供了车次信息,进行精确的查询,系统经过检索,返回符合用户要求的车次,再由用户自行选择满意的车次。
代码:
this.dingpiao=true;//创建窗体和容器
finalJFramejf=newJFrame("dingpiao");
JPaneljp=newJPanel();//创建组件
finalChoicecity=newChoice();finalChoicecity1=newChoice();
city.add("北京");city.add("上海");city.add("广州");
city1.add("北京");city1.add("上海");city1.add("广州");
JButtonbut=newJButton("确定");JLabelj1=newJLabel("起始站:
");
JLabelj2=newJLabel("终点站:
");JLabelj3=newJLabel("剩余票数:
");
JLabelj4=newJLabel("单价:
");JLabelj5=newJLabel("购买数量:
");
JLabelj6=newJLabel("合计:
");JLabelj7=newJLabel("付款:
");
JLabelj8=newJLabel("找零:
");finalJTextFieldjtf1=newJTextField();
finalJTextFieldjtf2=newJTextField();finalJTextFieldjtf3=newJTextField();
finalJTextFieldjtf4=newJTextField();finalJTextFieldjtf5=newJTextField();
finalJTextFieldjtf6=newJTextField();
//布局
jp.setLayout(null);j1.setBounds(0,0,80,30);
city.setBounds(80,0,80,30);j2.setBounds(160,0,80,30);
city1.setBounds(240,0,80,30);j3.setBounds(320,0,80,30);
jtf1.setBounds(400,0,80,30);j4.setBounds(0,40,80,30);
jtf2.setBounds(80,40,80,30);j5.setBounds(160,40,80,30);
jtf3.setBounds(240,40,80,30);j6.setBounds(320,40,80,30);
jtf4.setBounds(400,40,80,30);j7.setBounds(0,80,80,30);
jtf5.setBounds(80,80,80,30);j8.setBounds(160,80,80,30);
jtf6.setBounds(240,80,80,30);but.setBounds(400,80,80,30);
//将组件添加到容器
jp.add(j1);jp.add(j2);jp.add(j3);jp.add(j4);
jp.add(j5);jp.add(j6);jp.add(j7);jp.add(j8);
jp.add(but);jp.add(jtf1);jp.add(jtf2);jp.add(jtf3);
jp.add(jtf4);jp.add(jtf5);jp.add(jtf6);jp.add(city);jp.add(city1);
//将容器添加到窗体
jf.add(jp);
//设置窗体
jf.setSize(500,200);jf.setVisible(true);
退票页面:
根据车票号码来退票
代码:
this.tuipiao=true;Buttonbut;finalJTextFieldtf1;
Panelp1;frame=newJFrame("tuipiao");
frame.setSize(500,450);frame.setLocation(480,430);
//frame.pack();
frame.setLayout(newBorderLayout(5,5));
p1=newPanel(newGridLayout(1,1,5,5));
//p2=newPanel(newGridLayout(200,0,10,10));
frame.add(p1,BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);JPaneljeTextField=newJPanel();
jeTextField.setLayout(newBorderLayout(1,0));
jeTextField.add(newJLabel("Enterthenumber"),BorderLayout.WEST);
jeTextField.add(jtfMessage,BorderLayout.CENTER);
//getContentPane().add(jeTextField,BorderLayout.NORTH);
tf1=newJTextField(30);//存放显示区
tf1.setEditable(false);p1.add(jeTextField);
jtfMessage.setHorizontalAlignment(JTextField.RIGHT);
jtfMessage.addActionListener(this);
but=newButton("OK");p1.add(but);
查询页面:
选择查询条件
代码:
JFrameframe;intteformnum;
//JFrameframe;
Buttonb1,b2;Panelp1;
frame=newJFrame("查询:
请选择查询的方式:
");
frame.setSize(500,500);frame.setLocation(480,480);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBackground(Color.LIGHT_GRAY);
frame.setResizable(false);frame.setLayout(newBorderLayout(5,5));
p1=newPanel(newGridLayout(5,5,35,15));frame.add(p1,BorderLayout.CENTER);
b1=newButton("车次");b2=newButton("始发抵达城市");p1.add(b1);
p1.add(b2);
按车次查询:
输入车次查询:
按始发城市查询:
输入始站和终站:
订票成功返回成功信息:
文件系统:
代码:
//从文件中读取车票信息
publicArrayListTicketReader(){
FileInputStreamis=null;
Filefile=newFile("ticket.txt");
//创建byte数组,用于存放信息
byteb[]=newbyte[(int)file.length()];
try{
is=newFileInputStream(file);is.read(b);
Stringstr=newString(b);Stringtemp[]=str.split(";");
for(inti=0;iStrings[]=temp[i].split(",");Tickett=newTicket();
t.setStart(s[0]);t.setLast(s[1]);t.setPrice(Double.valueOf(s[2]));
t.setNum(Integer.valueOf(s[3]));ticket.add(t);
}
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
returnticket;
}
//将车票信息写入文件
publicvoidTicketWriter(){
OutputStreamos=null;Filefile=newFile("ticket.txt");Stringstr="";
//str用于存放车票信息
for(inti=0;istr=str+ticket.get(i).getStart()+","+ticket.get(i).getLast()+","+ticket.get(i).getPrice()+","+ticket.get(i).getNum()+";";}
try{
os=newFileOutputStream(file);os.write(str.getBytes());
}catch(FileNotFoundExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
程序设计体会:
从开始设计操作系统课程设计以来学到很多,也有很多不会的问题。
学到的东西:
(1):
课程设计完成需要从开始到结束细致的设计分析每一个细节的东西,设计,分析问题的能力要求很仔细。
(2):
对知识的要求:
课程设计的完成需要软件工程和操作系统等知识的结合。
(3):
课程设计需要对Windows的进程、内存管理、文件管理的了解及对代码的使用等等。
不会的东西:
(1):
对操作系统知识掌握不够牢固。
对进程之间的通信机制,同步互斥机制解决不好。
(2):
由于JAVA在学习阶段,许多东西不懂,难于详细写出程序,实现详细功能。
(3):
对于IO技术使用和分析不够细致。
参考文献:
(1):
操作系统课本
(2):
Windows程序设计
(3):
JAVA程序设计基础
(4):
WindowsIPC/同步互斥/IO