




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、专业课程设计II报告( 2015 / 2016 学年 第 一 学期)题目: 模拟电信计费管理系统 专 业 计算机科学与技术 学 生 姓 名 章慧 班 级 学 号 B12040310 指 导 教 师 黄 睿 指 导 单 位 计算机科学与技术系 日 期 2016.1.4 - 2016.1.14 指导教师成绩评定表学生姓名章慧班级学号B12040310专业计算机科学与技术评分内容评分标准优秀良好中等差平时成绩认真对待课程设计,遵守实验室规定,上机不迟到早退,不做和设计无关的事设计成果设计的科学、合理性功能丰富、符合题目要求 界面友好、外观漂亮、大方程序功能执行的正确性程序算法执行的效能设计报告设计报
2、告正确合理、反映系统设计流程文档内容详实程度文档格式规范、排版美观验收答辩简练、准确阐述设计内容,能准确有条理回答各种问题,系统演示顺利。评分等级指导教师简短评语该同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),演示程序(未)达到了(基本要求、提高要求1或/和2),撰写报告格式(规范、一般)、表述(清晰、一般、不清楚),圆满(较好、基本)完成了课题任务。(可选:尚存在缺陷。)指导教师签名日期2016-1-14备注评分等级有五种:优秀、良好、中等、及格、不及格模拟电信计费管理系统一、 课题内容和要求完成模拟电信计费管理信息系统,基本功能包括:1、入库功能。从本地选取原
3、始话单文件(text格式),并将话单文件中数据输入话单数据库(表)。2、计费功能。根据1功能存放在话单数据库中的通话记录和数据库中已建好的长途费率表对每一条通话记录计算其通话费用,并将结果保存在已完成话单划价的费用表中。3、话费查询。输入一个电话号码,从费用表中统计该电话号码的所有本地话费、长途话费,并从用户表中查找其用户名,最后在屏幕上显示。4、话单查询。输入一个电话号码,从费用表中查询所有的通话记录并在屏幕显示该用户的所有通话记录。5、数据管理功能。系统能对相关数据进行增、删、改功能。6、操作权限管理。用户必须通过登录和权限审核才能操作上述相应功能。二、需求和思路分析1、建立数据库tele
4、com(借助于HeidiSQL工具),分别建立课题对应用到的数据库表通话记录表callrecord,长途费率表cost,费用表fee,用户电话表phone,登录操作表operater。2、入库功能,通过html中<input id="fileName" type="file" />标签让用户自行选择本地存放话单文件目录,后端通过对文件内容的解析组装成callrecord对象,通过sql中insert语法插入到数据库callrecord表中。3、计费功能,为保证数据库中每条通话记录的通话费用不重复,故计费功能与入库功能是同步进行的,及将2功能中
5、解析组装成的对象直接与从cost费率表中取得的费率根据calltype属性进行配对相乘放入fee费用表中。4、话费查询,后端获得前端输入的电话号码数据,通过sql中select语句在fee表中根据calltype进行长途及本地话费统计,并通过out.print()输出在屏幕上。同样,根据获得的电话号码数据通过sql中select语句在phone表中查出用户名并显示。5、话单查询,与4功能相似,后端获得前端输入的电话号码数据后,通过sql中select语句在callrecord表查出其所有的通话记录并进行展示。6、数据管理功能,本课设中我以phone表中数据为例进行了增删改操作,前端接收用户输入
6、的电话及用户名(可为空),并设有四个按钮查询,增加,删除,修改,用户可根据电话或用户名查询已有数据,若无可增加,或对数据进行修改,或对数据进行删除。后端通过sql中insert,delete,update来对前端接收到的数据进行增删改。7、操作权限管理,本课设中,权限部分我是采用的session做的,数据库表operater中增加了一个属性为priority,每个操作者默认都可以进行查询功能,模仿linux系统权限处理的方式,我为priority属性设置了3个字符,对应增删改三个字段,具备该功能则相应位置1,不具备该权限则相应位置0(例:111代表该操作者同时具备查询增删改功能,000代表该操
7、作者只具备查询功能),在登录时便将该操作者对象放入session中,而在后台请求增删改时,则从session中取出该对象,并对该对象的权限属性进行字符串解析,并判断其所具备的权限,根据权限进行相应操作。三、概要设计 1、建立数据库a、通话记录表callrecord名称数据类型注释约束recordidint通话记录号主键phonenovarchar(11)电话号码calltypeint0:本地 1:长途durationint通话时长 表1、通话记录表 b、长途费率表cost名称数据类型注释约束calltypeint类型主键priceint费率 表2、长途费率表 c、费用表fee名称数据类型注释约
8、束phoneidint费用号主键phonenovarchar电话号码phonetypeint通话类型priceint价格 表3、费用表 d、操作员工表operater名称数据类型注释约束operaternamevarchar操作员工名主键passwordvarchar密码priorityvarchar(3)权限 表4、操作员工表 e、用户表phone名称数据类型注释约束phonenovarchar电话号码主键usernamevarchar用户名 表5、用户表2、入库流程图 图1、入库流程图3、计费流程图 图2、计费流程图4、话费查询流程图 图3、话费查询流程图5、话单查询 话单查询较话费查询更
9、为简单,在此不做流程图说明,简要文字说明。用户在页面输入手机号码,后端接收数据后以此为条件在数据库表callrecord中查询出信息,并用for循环进行展示即可。6、数据管理,操作权限流程图 图4、数据管理流程图四、详细设计 1、入库功能Service:public void importFile(String fileName) System.out.println("开始入库");List<CallRecord> list = new ArrayList<CallRecord>();File file = new File(fileName);t
10、ry /读入文件流FileReader fileReader = new FileReader(file);BufferedReader br = new BufferedReader(fileReader);String str;/循环获取文件内容每一行while (str = br.readLine() != null) /对每行字符串进行分割组成对象String strArray = str.split(","); CallRecord callRecord = new CallRecord(); callRecord.setPhoneno(strArray0); c
11、allRecord.setCalltype(Integer.parseInt(strArray1); callRecord.setDuration(Integer.parseInt(strArray2); list.add(callRecord); entityDao.save(callRecord);countFee(list);br.close(); catch (IOException e) / TODO Auto-generated catch blocke.printStackTrace();Controller:RequestMapping(value = "/enter
12、Db",method = RequestMethod.GET)public void uploadfile(RequestParam("fileName") String fileName)System.out.println("文件名"+fileName);uploadService.importFile(fileName);uploadFile.jsp:<body><center><p>请选择导入文件</p><input id="fileName" type=&quo
13、t;file" /><input id="btAdd" type="button" value="确认导入" onclick="bin()" /><br><br><a href="back">返回主页面</a></center><script type="text/javascript">function bin() var xmlhttp=new XMLHttpRequest
14、(); var fileName=document.getElementById("fileName").value; xmlhttp.open("GET","enterDb?fileName="+fileName+"&t="+Math.random(); xmlhttp.send(); </script></body>2、计费功能Service:public void countFee(List<CallRecord> callList)System.out.print
15、ln("开始计费");List<Object> costList = entityDao.createQuery("from com.dianxinfee.entity.Cost");Fee fee = new Fee();for(CallRecord callRecord:callList)for(Object obj : costList)/通话类型匹配后进行计算并组装对象后入库Cost cost = (Cost)obj;if(callRecord.getCalltype() = cost.getCalltype()fee.setPhon
16、eno(callRecord.getPhoneno();fee.setPrice(callRecord.getDuration()*cost.getPrice();fee.setPhoneType(callRecord.getCalltype();entityDao.save(fee);break;Controller:RequestMapping(value="/feequery")public void feeQuery(RequestParam("phoneNo") String phoneNo,HttpServletResponse respon
17、se) throws IOExceptionresponse.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");/ 标明消息体是什么类型System.out.println("电话号码为"+phoneNo);List<Integer> objList=feeService.phoneQuery(phoneNo);String userName = feeService.userQuery(phoneNo);Pri
18、ntWriter out = response.getWriter();double localFee = objList.get(0)/10+objList.get(0)%10*0.1;double longFee = objList.get(1)/10+objList.get(1)%10*0.1;out.print(userName+"客户你好!<br><br>");out.print("本地话费:"+localFee+"<br><br>");out.print("长途话费
19、:"+longFee);out.print("合计话费:"+(localFee+longFee);3、话费查询Service:public List<Integer> phoneQuery(String phoneNo)List<Object> objList=entityDao.createQuery("from com.dianxinfee.entity.Fee where phoneNo='"+phoneNo+"'"); int localFeeNum = 0; int long
20、FeeNum = 0;for(Object obj : objList)/对查询出的话费list对通话类型进行匹配并叠加 Fee fee=(Fee)obj; if(fee.getPhoneType()=0) localFeeNum+=fee.getPrice(); if(fee.getPhoneType()=1) longFeeNum+=fee.getPrice(); List<Integer> feeList=new ArrayList<Integer>(); feeList.add(localFeeNum); feeList.add(longFeeNum);retu
21、rn feeList;Controller:RequestMapping(value="/feequery")public void feeQuery(RequestParam("phoneNo") String phoneNo,HttpServletResponse response) throws IOExceptionresponse.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");/ 标明消息体
22、是什么类型System.out.println("电话号码为"+phoneNo);List<Integer> objList=feeService.phoneQuery(phoneNo);String userName = feeService.userQuery(phoneNo);PrintWriter out = response.getWriter();double localFee = objList.get(0)/10+objList.get(0)%10*0.1;double longFee = objList.get(1)/10+objList.ge
23、t(1)%10*0.1;out.print(userName+"客户你好!<br><br>");out.print("本地话费:"+localFee+"<br><br>");out.print("长途话费:"+longFee);out.print("合计话费:"+(localFee+longFee);4、话单查询Service:public List<Object> recordQuery(String phoneNo)List<
24、Object> recordList = entityDao.createQuery("from com.dianxinfee.entity.CallRecord where phoneNo='"+phoneNo+"'");return recordList;Controller:RequestMapping(value="/recordquery")public void recordQuery(RequestParam("phoneNo") String phoneNo,HttpServl
25、etResponse response) throws IOExceptionresponse.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");/ 标明消息体是什么类型System.out.println("电话号码为"+phoneNo);List<Object> objList=feeService.recordQuery(phoneNo);String userName = feeService.userQ
26、uery(phoneNo);PrintWriter out = response.getWriter();out.print(userName+"客户你好!<br><br>");for(Object obj : objList)CallRecord callRecord = (CallRecord)obj;if(callRecord.getCalltype()=0)out.print("本地:"+callRecord.getDuration()+"分钟<br>");if(callRecord.get
27、Calltype()=1)out.print("长途:"+callRecord.getDuration()+"分钟<br>");话费话单查询在同一个页面fee.jsp:Fee.jsp:<body><a href="./upload/back">返回主页面</a><center>请输入手机号<input type="text" name="phoneNo" id="phoneNo"><br>&l
28、t;br><input type="submit" name="upload" value="话费查询" onclick="fee()"><input type="submit" name="upload" value="话单查询" onclick="record()"><br><br><span id="myDiv"> </span>&l
29、t;/center><script type="text/javascript">function fee() var xmlhttp=new XMLHttpRequest(); var phoneNo=document.getElementById("phoneNo").value; xmlhttp.open("GET","feequery?phoneNo="+phoneNo+"&t="+Math.random(); xmlhttp.send(); xmlhttp.o
30、nreadystatechange=function() if(xmlhttp.readyState=4&&xmlhttp.status=200) document.getElementById("myDiv").innerHTML=xmlhttp.responseText; function record() var xmlhttp=new XMLHttpRequest(); var phoneNo=document.getElementById("phoneNo").value; xmlhttp.open("GET"
31、;,"recordquery?phoneNo="+phoneNo+"&t="+Math.random(); xmlhttp.send(); xmlhttp.onreadystatechange=function() if(xmlhttp.readyState=4&&xmlhttp.status=200) document.getElementById("myDiv").innerHTML=xmlhttp.responseText; </script></center></body&
32、gt;5、数据管理操作权限登录时service:public Operater operaterQuery(Operater operater) List<Object> opeList = entityDao.createQuery("from com.dianxinfee.entity.Operater where operaterName='"+ operater.getOperaterName() + "' and password='" + operater.getPassword() + "
33、9;");if (opeList.size() = 0) return null; else return (Operater) opeList.get(0);Controller:RequestMapping(value = "/home",method = RequestMethod.POST)public String userMainPage(Operater operater,HttpServletRequest request)HttpSession session=request.getSession();System.out.println(ope
34、rater.getOperaterName();Operater opera = loginService.operaterQuery(operater);if(opera = null)return "login"session.setAttribute("opera", opera);return "home"查询时service:public List<Object> queryPhone(String phoneNo,String userName)String sql = "from com.dianx
35、infee.entity.Phone where 1=1"if(phoneNo!="")sql+="and phoneNo='"+phoneNo+"'"if(userName!="")sql+="and userName='"+userName+"'"List<Object> objList=entityDao.createQuery(sql);return objList;Controller:RequestMappin
36、g(value="userQuery",method = RequestMethod.GET)public void queryUser(RequestParam("phoneNo") String phoneNo,RequestParam("userName") String userName,HttpServletResponse response) throws IOExceptionresponse.setCharacterEncoding("UTF-8");response.setContentType(
37、"text/html;charset=UTF-8");/ 标明消息体是什么类型String name = URLDecoder.decode(userName,"utf-8");System.out.println("用户名"+ name);PrintWriter out = response.getWriter();List<Object> objList = userService.queryPhone(phoneNo, name);for(Object obj:objList)Phone phone = (Phone
38、)obj;out.print(phone.getPhoneno()+"    "+phone.getUsername()+"<br><br>");if(objList.size()=0)out.print("无查询结果");增加时service:public void addPhone(String phoneNo,String userName)Phone phone=new Phone();phone.setPhoneno(phoneNo);p
39、hone.setUsername(userName);entityDao.save(phone);Controller:RequestMapping(value="userAdd",method = RequestMethod.GET)public void addUser(RequestParam("phoneNo") String phoneNo,RequestParam("userName") String userName,HttpServletResponse response,HttpServletRequest requ
40、est) throws IOExceptionHttpSession session=request.getSession();Operater opera = (Operater)session.getAttribute("opera");String name = URLDecoder.decode(userName,"utf-8");System.out.println("用户名"+ name);response.setCharacterEncoding("UTF-8");response.setConten
41、tType("text/html;charset=UTF-8");/ 标明消息体是什么类型PrintWriter out = response.getWriter(); if(opera.getPriority().charAt(0)='0')out.print("您没有插入权限,请尝试其他操作");else userService.addPhone(phoneNo, name); out.print("增加一条信息");删除时service:public void deletePhone(String phoneNo
42、,String userName)Phone phone=new Phone();phone.setPhoneno(phoneNo);phone.setUsername(userName);entityDao.delete(phone);Controller:RequestMapping(value="userDelete",method = RequestMethod.GET)public void deleteUser(RequestParam("phoneNo") String phoneNo,RequestParam("userName
43、") String userName,HttpServletResponse response,HttpServletRequest request) throws IOExceptionHttpSession session=request.getSession();Operater opera = (Operater)session.getAttribute("opera");String name = URLDecoder.decode(userName,"utf-8");System.out.println("用户名"
44、;+ name);response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");/ 标明消息体是什么类型PrintWriter out = response.getWriter();if(opera.getPriority().charAt(1)='0')out.print("您没有删除权限,请尝试其他操作");elseuserService.deletePhone(phoneNo, name); ou
45、t.print("删除一条信息");修改时service:public void updatePhone(String phoneNo,String userName)Phone phone=new Phone();phone.setPhoneno(phoneNo);phone.setUsername(userName);entityDao.update(phone);Controller:RequestMapping(value="userUpdate",method = RequestMethod.GET)public void updateUser
46、(RequestParam("phoneNo") String phoneNo,RequestParam("userName") String userName,HttpServletResponse response,HttpServletRequest request) throws IOExceptionHttpSession session=request.getSession();Operater opera = (Operater)session.getAttribute("opera");System.out.print
47、ln("用户"+opera);String name = URLDecoder.decode(userName,"utf-8");System.out.println("用户名"+ name);response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");/ 标明消息体是什么类型PrintWriter out = response.getWriter();System.out.p
48、rintln("用户权限"+opera.getPriority();if(opera.getPriority().charAt(2)='0')out.print("您没有更改权限,请尝试其他操作");elseuserService.updatePhone(phoneNo, name);out.print("更新一条信息");数据管理页面User.jsp:<body><center>请输入手机号<input type="text" name="phoneNo&q
49、uot; id="phoneNo">请输入姓名<input type="text" name="userName" id="userName"><input type="submit" name="upload" value="查询" onclick="query()"><br><br><input type="submit" name="add&
50、quot; value="增加" onclick="add()"><input type="submit" name="delete" value="删除" onclick="remove()"><input type="submit" name="updat" value="修改" onclick="updat()"><br><br><
51、span id="myDiv"> </span></center><script type="text/javascript">function query() var xmlhttp=new XMLHttpRequest(); var phoneNo=document.getElementById("phoneNo").value; var userName=document.getElementById("userName").value; xmlhttp.open(&
52、quot;GET",encodeURI(encodeURI("userQuery?phoneNo="+phoneNo+"&userName="+userName+"&t="+Math.random(); xmlhttp.send(); xmlhttp.onreadystatechange=function() if(xmlhttp.readyState=4&&xmlhttp.status=200) document.getElementById("myDiv").inner
53、HTML=xmlhttp.responseText; function add() var xmlhttp=new XMLHttpRequest(); var phoneNo=document.getElementById("phoneNo").value; var userName=document.getElementById("userName").value; xmlhttp.open("GET",encodeURI(encodeURI("userAdd?phoneNo="+phoneNo+"&a
54、mp;userName="+userName+"&t="+Math.random(); xmlhttp.send(); xmlhttp.onreadystatechange=function() if(xmlhttp.readyState=4&&xmlhttp.status=200) document.getElementById("myDiv").innerHTML=xmlhttp.responseText; function remove() var xmlhttp=new XMLHttpRequest(); var
55、 phoneNo=document.getElementById("phoneNo").value; var userName=document.getElementById("userName").value; xmlhttp.open("GET",encodeURI(encodeURI("userDelete?phoneNo="+phoneNo+"&userName="+userName+"&t="+Math.random(); xmlhttp.send(
56、); xmlhttp.onreadystatechange=function() if(xmlhttp.readyState=4&&xmlhttp.status=200) document.getElementById("myDiv").innerHTML=xmlhttp.responseText; function updat() var xmlhttp=new XMLHttpRequest(); var phoneNo=document.getElementById("phoneNo").value; var userName=doc
57、ument.getElementById("userName").value; xmlhttp.open("GET",encodeURI(encodeURI("userUpdate?phoneNo="+phoneNo+"&userName="+userName+"&t="+Math.random(); xmlhttp.send(); xmlhttp.onreadystatechange=function() if(xmlhttp.readyState=4&&xmlhttp.status=200) document.getElementById("myDiv").innerHTML=xmlhttp.responseText; </script></body>为乱码问题设置拦截器部分代码:WebFilter("/*")public class Encoding implements Filter /* * Default constructor. */ public Encoding() / TODO Auto-generated construc
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 艺术装置制作合同范本
- 煤矿设备采购合同范本
- 店面出租长期合同范本
- 只做设计合同范本
- 私房居住出租合同范本
- 内墙涂料的合同范本
- 餐馆股份合同范本简单
- 租房天花改造合同范本
- 坏疽性脓皮病清创护理查房
- 土地流转与生态平衡合同
- 绩效薪酬管理办法模板
- ZLP630高处作业吊篮使用说明书
- 2025至2030中国电容膜片真空计行业发展趋势分析与未来投资战略咨询研究报告
- 药品研发项目管理制度
- 社工儿童沟通技巧课件
- 建设项目环境影响变更说明报告
- 新疆和田县多宝山铅多金属矿项目环境影响报告书
- 2025二年级语文下册期末统考测试卷汇-总
- 血管活性药物静脉输注护理
- 苯乙酮项目可行性研究报告
- 卫星遥感技术在军事目标识别中的应用-洞察阐释
评论
0/150
提交评论