版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、给学弟学妹的福利,c+语言代码这个有点难度.因为用到了链表.大家多多思考一下.代码仅 供参考.最好不要复制.手敲一遍也是好的.还有其它学期的课设.c,数据结构.数据库原理.数 据库应用与技术.C+程序设计课程设计说明书题 目学生考勤管理系统的设计学号1367159121姓名谭海兵指导教师孙涛日期第十九周8目录目录 2第 1 章 需求分析 3第 2 章 总体设计 4第 3 章 类的设计 53.1 Data 类的设计 53.2 Node 类的设计 63.3 List 类的设计 6第 4 章 详细设计 74.1 工程视图 74.2 类图视图 74.3 主程序流程图 84.4 主要算法的流程图 9第
2、5 章 测试 10第 6 章 总结 14附录:程序代码 15第1章需求分析用C+设计一个系统,能提供下列服务:录入学生的缺课记录,格式为:日期课程节次学号姓名缺课类型2011-11-2C+1, 2200705062231李四请假其中缺课类型包括迟到,请假和旷课。查询功能。可以根据学生的学号或姓名查询某个学生的缺课情况;可以查询某个课程的 课情况;可以查询某一天的缺课情况;修改功能。根据查询方式找到某一条缺课记录,进行修改,并显示修改后的记录。统计功能。可以统计某一门课程所有学生的缺课记录,按照日期顺序进行显示;可以统 计某个学生所有的缺课记录,按照日期顺序进行显示;第2章总体设计1增加信息J2
3、.列出信息3查询信息4修改信息5. 统计信息6. 读取信息7. 保存信息0.退出程序程序运行后出现上面的菜单。输入相应的数字完成相应的功能。有下面几点需要注意。输入1.增加信息,在输入日期的时候要按照20140206的格式来输入。输入6.读取信息,是在当前已有的信息上追加输入信息。输入7.保存信息,已覆盖原有的信息的方式保存。第 3章 类的设计3.1 Data 类的设计Class Datapublic:Data()/ 重载无参构造函数Data(string Date,string Course,string Time,string Id,string Name,string Type) /重载
4、有参构造函数void setdate(string&sdate)void setcourse(string&scourse)void settime(string&stime)void setid(string&sid)void setname(string&sname)void settype(string&ssype)/上面都是无返回值有参的设置函数,用来设置私有成员的值 string& getdate()string& getcourse()string& gettime()string& getname()string& gettype()string& getid()/上面都是返回类
5、型为字符串型的无参获取函数,获取私有成员的值void Prin t();输出函数,输出私有成员private:stri ng date;/日期stri ng course;/课程stri ng time;/ 缺课节次stri ng id;/ 学号stri ng n ame;/姓名stri ng type;/类型;3.2 Node 类的设计 Class Node public:Node(Data*);参数类型为Data的构造函数Node();析构函数void SetNext(Node*node)/参数类型为Node,设置下一个节点Node*GetNext();返回值为Node,获取下一个节点Da
6、ta*GetData();返回值为Data,获取当前 Data数据 private:Data*itsData;当前所指向的 Data类数据Node*its next;/当前节点指向的下一个节点;3.3 List 类的设计Class List public:List();/List 构造函数List();/List 析构函数Fi nd(stri ng number);/按 学号进行查询Fi nd4(stri ng Name);/按姓名进行查询修改Fi nd3(stri ng number);/按学号进行查询修改Fi nd2(stri ng Name);/按 姓名进行查询Fi nd1(stri n
7、g Course);/按 课程统计信息Fin d11(stri ng Name);/按 姓名统计信息Data*operator(i nt offset);/ 重载下标运算符int GetCou nt()获取节点个数Data*GetFirst();/ 获取头节点void In sert(Data*);/ 插入函数void Show();显示函数 private:Node*head;头节点int coun t;/节点个数;第4章详细设计4.1工程视图画工隹区翌生考勤叠理GT工厂 -罰孝生老勤曾拯fiiZ 由学生*勤管理p4.2类图视图3孕生考勤管理classes -Data DataQQ Data
8、fstring Date* string Coursi 令 getcourseQ 审 getdateQQ getidO gelnameQQ gettimtO gettypelO PrintQ令 setcoursefstring &scourse setdstefstring Ssdate)Q setidstring &sid setnamestring &sname)Q settimefstring Sstime) settype(string &ssype) 酣 course鱼 date 蛍id 曲 name 创 time ttype-goods3 course华 daleH- Q id0
9、name0 lime3 type *?List令 Fin叫string number) Findl string Course Findl 1 string Name)鱼 time闔 type3 弋 goods0 course幺 date0 id0 name0 time0 type a 书 List Flndstring number) Findl string Course令 Findl 1 (string Name Finds string Name).Find3string number Find4(string Name) GetCountQ GeiFlrsiQ.lnsertData
10、*pData)Q ListflQ ListO operator int offset)Q Shov/Q 险 count 曲 headH 乜 Node金 GetDataQ GetNextQ NodefData *pData NodeO SetNext(Node *node 希 its Data its next-L3 Globals.mainQ fileQ Fiirvd2string Name) 审 Fiind3string number4.3主程序流程图4.4主要算法的流程图void List:lnsert(Data*pData) 插入函数返回10第5章测试21主界面:自心序兰才王 |4 0息
11、息亠一0 一一R统询存 理; 菅百屮息亠一一Ri增加信息:请输入日期;20140&25请输入课程匕 日语请输人节次:7,8请输入学号1367159121 童軽名字 ifix缺课类型1義续増加信息0返回:2列出信息Ivmki ml., mrlmlLl-ml., mrlmFLml., mrlmLlL .F |亠 _ef. e.- ef. e.- OU1EF. E.- nol EF. 迟鉀斟斟沪書鈿w兵 丘八兵丘往八信五海豊蒋海海海红四赵王谭王王谭谗谭谨臺136715912? 1367159126 1367159121 1367159135 1367159137 1367159121 136?15?
12、121 1367159121 1367159121 1367159125 1367159122卄耳 T卄P卄 P4T卄XT卄 T卄XP4T2 2 2 2 2 2 6 8 2 2 21111115 7 111013 阳 15 0146226 0140306 0140316 0140416 0140506 0140512 0140625 0140914 0141015 0141115mr.mL - mlir-mL.1 -rTLl/E 亠匚.4e-tf 备旷旷缺丘八丘八丘至八丘八 海海海海海 彰SSiK彰SS *1 *1 Fl兰口3查询信息|0.返回1367159121201405062014051
13、2201466252014091420130915高数 2节 1367159127一按学号进行查询2-按姓名进行查询歐返回.2节节 13671S91218节 1367157121号进行查询岛按姓名进行查询0返回汐4修改信息人所熒軍扶比J至1014030601405060140512101406250140914请输人筛选条件日10140306改旳字号 1367159121136715?12113671591211367159121136715?1211367159121r:?,8T1/节20140306_1.2 节期
14、2课程M节次4学号5 .姓名缺课类型 的缺课类型:旷课继续修改取完成養改汕0140306咼“|aoB01309151367159121El1367159121进行查询修改取返回的姓各高数1.2 节 1367159127旦期器课程戛节次4 .学号5 .姓名6 .缺课类型 血込修咚居电缺迷査型汀广课 -继续核改0 完成塵改旳 0130915高数按学号进行查询修衣2I kq-| 99进行查询修改0返回5.统计信息了入查询的课程名:I!1,1,1367159127136715S1211367159135am丘八兵兵丘八兵 海海海海海 iij-B囂iij-B王强mL mL mrmL mL Lufy UJ
15、7TE-7FLuf/IE7T旷课2请蹇入查询的姓名:2014030620140506201405122014062520140914日语C+ +111367159121136715912113671591211367159121请按回车键返回主窗口2节 1367159121兵丘八丘宾兵 海海海海海 買:til?富rmjimr- rn*-.CTLllrnLl- E E7-6读取信息20130915 20140226 0140306 20140316 2014041C 20140506 20140512 20140&25 20140914 20141015 60141115 读取成功.ssi卄T卄
16、T卄T卄T卄T卄理T卄T卄T 22222 2 68-2 22学号136715912?1367159126136715912113671591351367159137136715912113671591211367159121136715912113671591251367159122兵 丘八兵兵兵mr寸昙 l-IL mi, mlix mL mL mL、 m LlimL BrE7TLufy $, E7TETtuff-vIUJ7TLU-7FLI% EF. tHF?旷缺旷薜缺旷旷缺驛j0退出程序7保存信息n型rrvb m-.mA. rrvL 3*-.ml. mt-.mt m-L-. nu.- G.-
17、 Gu . RM.- Eln. RMT .- RH/ Eln. rht. Rm.- 旷缺旷缺缺缺旷旷缺缺缺谭谭谭谭聿0130915 014022S 014030& 014031& 014041 & 0140S0& 0140512 0140625 0140914 0141015 0141115豆豆豆豆豆豆豆豆豆豆页豆an 呈口* 口士呈口* 口士呈口* 口士口占口士 口 JFT-slvvl-r-viT-u-vlL 幺卄会丁幺“占*-会T*S ?J呈呈呈呈呈呈呈呈呈呈呈十23456789 .JWSMS tins1367159127136715912S 1367159121 1367159135 1
18、367159137 1367159121 1367159121 1367159121 1967159121 1367159125 1367159122丘八 丘宾兵兵信五海豊薄海海海红四赵王谭王王第 6章 总结从课程设计一公布就开始写了,程序的代码是参考范磊老师所编著的零起点学通C+ 里面的一个范例 -具有保存和读取功能的商品管理系统。刚开始是边看视频边敲代码,视频部分所演示的没有保存和 读取功能,照着视频把代码敲完后也理解的差不多了。于是就按照自己的需求来进行改动,由于需要输入 的数据太多,很麻烦于是想要设计一个保存和读取的功能。来减少测试数据的输入,于是在后面的程序源 码中找到了具有保存和读
19、取功能的源码,于是把那部分复制过来进行修改,然而结果却不是那么的理想, 当时保存当时读取就没有问题,一但关闭程序后,再次运行一读取就会崩溃,我经过了反复的测试找到崩 溃的原因是read ()方法不能多次运行,多次运行就会崩溃,然而当时的我走入了误区即使是知道那句话 有问题,可依然改正不了。在那个问题上停滞了两三天,我放弃了,后来某一天想到可以在代码中直接输 入信息避免运行程序后输入测试数据的繁琐,可是还有2个问题纠结着当时的我, 1 是日期格式输入问题题目要求是 2011-11-2,后面还要求按照日期进行排序,我纳闷了。这个如何比大小。难道需要编一个函数 把年月日分离出来后在比较吗?那样会不会
20、太麻烦了。第二个问题是查找信息,考勤系统一个查找条件对 应着多条信息,源程序是找到一个数据后就返回,这样重复的数据就读取不到了,不过这个问题没有太多 困难,想了想就解决了。日期问题后来问了老师,老师说统一格式输入来解决,不足2 位的前面补零。我当时是被题目蒙住了。还以为是 2 不能写成 02.不过写成 02 的话,大小瞬间就好比了。后来还遇到了问题 就是修改信息是查出来好多条要如何修改。当时有 2 种想法一种是编号,另一种是筛选。我刚开始想用编 号。但是链表里你给查出的数据编号容易但要修改就稍微有些麻烦了。你需要把找出的数据再次存到一个 地方。来根据序号修改。我又想万一数据上百条的时候根据编号
21、修改就又显得不是那么人性化了。我于是 就选了筛选条件来修改,这样相对来说简单了一点。条件修改也有些麻烦。当根据根据姓名查找出多条信 息后。可以通过日期筛选。一天课迟到多次的可以根据节次或者课程来筛选。但是为了省事。只做了通过 日期筛选。所以在输入数据时一天里同一个人是不会迟到 2 次的。在没有保存和读取的情况下所有模块都 做完后。我又想试试读取和保存模块了。结果还是原来的问题。又是一句一句的测试。突然脑子闪出个思 路。就是C+的字符串是没有大小的。会不会是这个问题。想到这后。马上改为c的字符数组,果然问题解决了。解决问题那一刻的喜悦让我觉得一切枯燥的测试都是值得的。附录: 程序代码#inclu
22、de #include #include / 为了使用 numeric_limitsusing namespace std;#include / 为了使用字符串输入输出流#include / 为了执行文件输入输出操作struct goodschar date15;/ 日期char course20;/ 课程char time10;/ 缺课节次char id20;/ 学号char name20;/ 姓名char type10;/ 类型;const char*file=goods.dat;class Data /学生数据类public:Data()Data(string Date,string C
23、ourse,string Time,string Id,string Name,string Type): date(Date),course(Course),time(Time),id(Id),name(Name),type(Type)/ 初始化 void setdate(string&sdate)date=sdate;void setcourse(string&scourse)course=scourse;void settime(string&stime)time=stime;void setid(string&sid)id=sid;void setname(string&sname)n
24、ame=sname;void settype(string&ssype)type=ssype;string& getdate()return date;string& getcourse()return course;string& gettime()return time;string& getname()return name;string& gettype()return type; string& getid()return id;void Print();private:string date;/ 日期 string course;/ 课程 string time;/ 缺课节次 st
25、ring id;/ 学号 string name;/ 姓名 string type;/ 类型;void Data:Print()/ 输出函数coutdatet; coutcourset; couttime 节 t; coutidt; coutnamett; couttypeGetNext(); n+;cout 程序结束,删除第 n=count)return NULL; for(int i=0;iGetNext();return pn-GetData();Data*List:GetFirst()/ 获取头节点if (head)return head-GetData();elsereturn NU
26、LL;List:Find(string number)/ 按学号查询信息Node*pn=0;int a=0;for(pn=head;pn!=NULL;pn=pn-GetNext() if(pn-GetData()-getid()=number) pn-GetData()-Print(); a=1;if(a=0)cout 找不到该学号 GetNext() if(pn-GetData()-getname()=Name) pn-GetData()-Print();pn1=pn;a+;if (a=1)while(1)if (!choice)pn1-GetData()-Print(); break;qw
27、e: coutchoice;switch(choice)case 1:coutdate; pn1-GetData()-setdate(date); break;case 2:coutcourse;pn1-GetData()-setcourse(course); break;case 3:couttime; pn1-GetData()-settime(time); break;case 4:coutid; pn1-GetData()-setid(id); break;case 5:coutname;pn1-GetData()-setname(name); break;case 6:couttyp
28、e; pn1-GetData()-settype(type); break;default:cout 请输入 1-6 之间的数字 !endl;goto qwe;break;coutchoice;if (a!=1)coutdate; for(pn=head;pn!=NULL;pn=pn-GetNext() if(pn-GetData()-getname()=Name & pn-GetData()-getdate()=date) pn-GetData()-Print();pn1=pn;b=true;if (b)while(1)if (!choice)pn1-GetData()-Print();br
29、eak;qwe1:coutchoice;switch(choice)case 1:coutdate; pn1-GetData()-setdate(date);break;case 2:coutcourse;pn1-GetData()-setcourse(course); break;case 3:couttime;pn1-GetData()-settime(time); break;case 4:coutid;pn1-GetData()-setid(id); break;case 5:coutname;pn1-GetData()-setname(name); break;case 6:cout
30、type;pn1-GetData()-settype(type); break;default:cout 请输入 1-6 之间的数字 !endl; goto qwe1;break;coutchoice;elsecout 找不到该日期信息 endl;if(a=0)cout 找不到该姓名 GetNext() if(pn-GetData()-getid()=number) pn-GetData()-Print(); pn1=pn; a+;if (a=1)while(1)if (!choice)pn1-GetData()-Print(); break;qwe: coutchoice;switch(ch
31、oice)case 1:coutdate;pn1-GetData()-setdate(date);break;case 2:coutcourse; pn1-GetData()-setcourse(course); break;case 3: couttime;pn1-GetData()-settime(time); break;case 4: coutid;pn1-GetData()-setid(id); break;case 5: coutname;pn1-GetData()-setname(name); break;case 6: couttype;pn1-GetData()-settyp
32、e(type); break;default: cout 请输入 1-6 之间的数字 !endl; goto qwe; break;coutchoice;if (a!=1)coutdate;for(pn=head;pn!=NULL;pn=pn-GetNext() if(pn-GetData()-getid()=number & pn-GetData()-getdate()=date) pn-GetData()-Print(); pn1=pn; b=true; if (b)while(1)if (!choice) pn1-GetData()-Print(); break;qwe1:coutcho
33、ice;switch(choice)case 1:coutdate;pn1-GetData()-setdate(date); break;case 2:coutcourse;pn1-GetData()-setcourse(course); break;case 3:couttime;pn1-GetData()-settime(time); break;case 4:coutid;pn1-GetData()-setid(id); break;case 5:coutname;pn1-GetData()-setname(name); break;case 6:couttype;pn1-GetData
34、()-settype(type); break;default:cout 请输入 1-6 之间的数字 !endl; goto qwe1;break;coutchoice;elsecout 找不到该日期信息 endl;if(a=0)cout 找不到该学号 GetNext()if(pn-GetData()-getname()=Name)pn-GetData()-Print();a=1;if(a=0)cout 找不到该姓名 GetNext()if(pn-GetData()-getcourse()=Course)pn-GetData()-Print();a=1;if (a=0)cout 找不到改课程缺
35、课信息 GetNext() if(pn-GetData()-getname()=Name)pn-GetData()-Print(); a=1;if (a=0)cout 找不到改姓名缺课信息 endl; void List:Show()if(!head)return;cout 日期 tt;cout 课程 t;cout 节次 t;cout 学号 tt;cout 姓名 tt; cout 类型 endlGetData()-Print(); while(pn=pn-GetNext(); void List:Insert(Data*pData)Node*pn=new Node(pData);Node*pN
36、ow=head;Node*pNext=0;string New=pData-getdate();string next;count+;if(!head)/ 如果头节点不从在,将新构造的节点作为头节点head=pn;return;if(head-GetData()-getdate()New)/ 如果新插入的日期大于已存在的pn-SetNext(head);/head 成为了 pn 的下一个节点head=pn;/pn 成为了头节点return;for(;)nextif(!pNow-GetNext()/ 当前节点 (头节点) 的 next 指针是否为空 或者到达尾节点将尾节点的 指针指向新节点pNo
37、w-SetNext(pn);为空,将新节点 pn,设置为当前节点(头节点)的 next指针 return;pNext=pNow-GetNext();/存在下一个节点,获取当前节点的 next指针 next=pNext-GetData()-getdate();/ 读取下个节点的日期保存到 next 字符串变量 if(nextNew)/ 下个节点的日期与当前节点的日期比较大小pNow-SetNext(pn);如果大,将新节点地址赋给当前节点的next指针pn-SetNext(pNext);/ 将下一个节点地址赋给新节点的 next 指针 return;pNow=pNext;/ 如果小,将下一个节点
38、赋给当前节点,继续循环比较int main()List pl;Data*pdata=0;int choice;bool quit=false;string date ; /日期stri ng course;/ 课程string time;/ 节次30string id;/ 学号 string name;/ 姓名 string type;/ 类 while (1)36system(cls); cout cout 1. 增加信息学生考勤管理系统2.列出信息3.查询信息 4.修改信息cout 5. 统计信息6.读取信息cout 请输入功能编号: ;7.保存信息 0.退出程序endl;endl;cho
39、ice; switch (choice) case 1:system(cls);while (1)if (!choice) break;else if (choice=1)cout 请输入日期: date;cout 请输入课程: course;cout 请输入节次: time;cout 请输入学号: id;cout 请输入名字: name;cout 请输入缺课类型 type;pdata=new Data(date,course,time,id,name,type); pl.Insert(pdata);elsecout 请输入 0-1 之间的数字 n; coutchoice;break;endl;case 2: system(cls); if(pl.GetFirst()=0) cout 您的信息为空,请增加信息, n 按回车键返回主窗口 cin.get(); cin.get();elsepl.Show();cout 一共有 pl.GetCount() 条缺课记录 endl;cout 请按回车键返回主窗口 endl;cin.get();cin.get(); break;case 3: system(cls); while (1) coutchoice; if(!choice) break;if(choice=1)cout 请输入所要查
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 汽车整车运输合同保险
- 2024年医疗健康大数据平台开发合同
- 数字艺术收藏与交易合同
- 餐饮行业食品安全保证合同协议
- 物业承包服务合同
- 电子商务行业商品信息真实免责合同
- 高峰会城市论坛技术支持合同
- 二零二四年度企业人力资源优化方案代理合同协议书3篇
- 二零二四年度企业培训项目效果评估合同3篇
- 二零二五年度车贷保证金合同模板(汽车金融定制)3篇
- 安全生产法律法规汇编(2025版)
- 2024年英语高考全国各地完形填空试题及解析
- 2024至2030年中国餐饮管理及无线自助点单系统数据监测研究报告
- 2024年服装门店批发管理系统软件项目可行性研究报告
- 体育概论(第二版)课件第三章体育目的
- T-GDASE 0042-2024 固定式液压升降装置安全技术规范
- 香港朗文4B单词及句子
- 运动技能学习与控制课件第五章运动中的中枢控制
- 财务部规范化管理 流程图
- 断绝关系协议书范文参考(5篇)
- 最新变态心理学课件
评论
0/150
提交评论