您的当前位置:首页正文

学生考勤管理信息系统课程设计

2022-05-02 来源:意榕旅游网


课程设计说明书

题系

(

目 )

学生考勤管理系统

计算机科学与技术系 10计科一班

专业(班级) 姓学指起

名 号

导止

教日

师 期

课 程 设 计 任 务 书

课程 题目 主 要 内 容 A 数据结构课程设计 序号 12 要 求 工 作 计 划 及 进 度 1. 14周星期一: 选题、交分组名单和课程设计题目;收集资料、需求分析;确定目标、设计方案并选择方案;系统设计; 2. 14周星期一至14周星期四: 程序设计;撰写课程设计报告; 3. 14周星期五: 提交课程设计报告,汇报演示。 指导教师签字 2010年11月30日 教研见室审定意

签字 2010年11 月 30 日 第2页 共26页

计划时间 指导老师

课程设计的考核方式及评分方法 1) 考核方式

 课程设计结束时,在机房当场验收。  教师提供测试数据,检查运行结果是否正确。  回答教师提出的问题。

 学生提交课程设计文档(A4纸打印) 2) 评分方法

论文考核标准:参考《计算机系课程设计任务书》

论文:40%,软件:40%,答辩:20%

学生

指导教师签名: 日期:

教研室主任签名: 日期:

系主任签名: 日期:

第3页 共26页

长沙学院课程设计鉴定表

姓名 学号 专业 计算机科学与班级 10计科 技术 指导教师 王俊 设计题目 指导教师意见: 评定等级: 教师签名: 日期: 答辩小组意见: 评定等级: 答辩小组长签名: 日期: 教研室意见: 教研室主任签名: 日期: 系(部)意见: 系主任签名: 日期: 说明 课程设计成绩分“优秀”、“良好”、“及格”、“不及格”四类;

第4页 共26页

摘要

本次课程设计是Android文件管理器

本学生考勤管理系统利用C语言,采用了数据结构程序设计思想以及文件管理的使用。拟一个简单的文件管理系统。树型结构,目录下可以是目录,也可以是文件,文件系统采用二叉树型存储结构,目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开,可实现文件目录的创建,显示,删除,改变,文件的创建,删除。对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

关键词:文件管理,二叉树存储结构,函数实现

第5页 共26页

目录

1 设计内容与要求 „„„„„„„„„„„„„„„„„„„„„„„„„„„„7 2.设计说明 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„8 2.1 问题描述与功能设计„„„„„„„„„„„„„„„„„„„„„„„„8 2.2 算法与数据结构„„„„„„„„„„„„„„„„„„„„„„„„„„9 2.3 函数定义„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„11 2.4 测试„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„16 3 总结„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„18

参考文献 „„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„18 附录A 源代码„„„„„„„„„„„„„„„„„„„„„„„„„„„„„„19

第6页 共26页

1设计内容与要求

设计题目:Android文件管理器

1.基本要求:

(1) 要求用数据结构二叉树树形结构思想来完成设计; (2) 要求树型结构,目录下可以是目录,也可以是文件 (3) 以树的形式显示所有的文件和文件 (4) 通过输入文件名,实现文件搜索的功能 (5) 在树中增加一个新文件,正确的显示出来 (6) 在树中删除一个文件,正确的显示 (7) 输入一个文件名,实现文件搜索功能

(8) 程序调试通过后,完成程序文档的处理,加必要的注释 高级要求:

(1)显示文件的大小、创建日期,修改时间 (2)输入一个文件名,实现文件搜索功能

2. 创新要求

在基本要求达到后,可以进行创新设计。

3.设计方法和基本原理 1)问题描述:

Android手机上默认没有文件管理器,因此需要设计一个文件管理器,要求以树形结构显示每个文件和文件夹,并且可以方便的对文件或文件夹进行增,删操作,此外还可以将文件移至任意文件夹中,请用C实现主要结构和算法

2)设计思想

1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。

2.文件存储空间的分配采用显式链接分配。为了实现创建和删除文件必须要有一棵初始的文件树存在,以便在文件树的根节点下实现创建和删除文件。 3. 数据结构与树结构。数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树中每个分叉点称为结点,起始结点称为树根,任意两个结点间的连接关系称为树枝,结点下面不再有分枝称为树叶。结点的前趋结点称为该结点的\"双亲\",结点的后

第7页 共26页

趋结点称为该结点的\"孩子\",同一结点的\"孩子\"之间互称\"兄弟\"。

4.文件目录结构采用多级目录结构。为了简单起见,可以使用文件结构体,结构体内容包括:文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指

5. 要有分解函数对输入的命令进行分解。以识别那部分是哪部分是命令,哪部分是路径和文件名。

6. 最后要有执行函数。来执行输入的创建文件命令。

设计工作量:

(1)软件设计:完成问题陈述中所提到的所有需求功能。

(2)论文:要求撰写不少于3000个文字的文档,详细说明各阶段具体要求。

工作计划:13-14周

安排两周时间进行课程设计,软件开发步骤如下,第一周完成1~6,第二周完成7~10,论文同步进行; (1)写出需求分析(做什么)

(2)分析系统中的各个实体之间的关系及其属性和行为 (3)设计系统的函数层次

(4)完成函数中函数的描述(包括属性和方法) (5)完成类中各个成员函数的定义和实现 (6)代码编写 (7)功能调试

(8)撰写课程设计报告书 (9)答辩

第8页 共26页

2设计说明

2.1 问题描述与功能设计

1)问题描述:Android手机上默认没有文件管理器,因此需要设计一个文件管理器,

要求以树形结构显示每个文件和文件夹,并且可以方便的对文件或文件夹进行增,删操作,此外还可以将文件移至任意文件夹中

2)功能设计:

1分析系统中的各个实体之间的关系及其属性和行为;

2设计系统的类层次,充分运用C++的复合、继承、多态等机制进行软件渐增式开发;

3完成类层次中各个类的描述(包括属性和方法)和具体实现用户界面需求

用户界面需求

对于一个好的软件有一个友好的用户界面是很重要的。用户界面应尽量做得简单、层次清晰明了

对考勤管理系统应实现的功能描述如下: 1用户信息管理

用户信息管理的基本功能是添加、修改、删除、浏览用户详细信息。 2信息管理

包括缺课日期、第几节课、课程名称、学生姓名、缺课类型(迟到、早退、请假及旷课) 3查询功能

考勤人员能够按学号、姓名查询某学生的考勤记录或按专业、班级查询某个班级的考勤记录 4统计功能

考勤人员可以统计学生的考勤记录 5修改功能

考勤人员具有修改学生考勤记录、如请假、旷课等记录

第9页 共26页

2.2 算法与数据结构

第10页 共26页

第11页 共26页

2.3 函数定义

//student.h文件中student类的定义 class Student{ public:

// 学生信息

char stuName[20]; int stuNum;

char stuClass[20]; // 缺课信息

char courseName[20];

int courseNum; // 第几节课 char courseType[20]; // 缺课日期 int year; int month; int day; /*

* 创建链表用来存储学生信息 */

bool CreateList(node &L) {

L = new Node; // 动态分配内存,创建链表头结点 if(!L) {

// 内存分配失败 return false; }

L->next = NULL; // 创建空链表成功,头结点指针域为空 return true; }

//学生缺课类型

int chidaoCount = 0;//迟到 int zaotuiCount = 0; //早退 int kuangkeCount = 0; //旷课 int qingjiaCount = 0; //请假

char *queke[4] = {\"迟到\早退\旷课\请假\

第12页 共26页

2.4 界面设计

while(1) {

cout<<\"===========欢迎进入学生考勤管理系统====================\\n\";

cout<<\"1:新增学生信息(非降序插入) 2:按学号删除学生信息\\n\";

cout<<\"3:按学号修改学生信息 4:输出学生信息列表\\n\"; cout<<\"5:按学号查询输出学生信息\\n\"; cout<<\"6:统计学生缺课信息列表\\n\";

cout<<\"请选择要执行的功能指令:(菜单指令如上)\"<cout<<\"=======================================================\\n\";

cin>>order; switch(order) {

case 1:

cout<<\"==========新增学生信息面板(非降序插入)=============\\n\";

InputStu(stu);

InsertAscend(head, stu);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k)

{cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 2:

cout<<\"==========按学号删除学生信息=============\\n\"; cout<<\"请输入要删除的学生的学号:\"; cin>>stuNum;

DelFromNum(head, stuNum);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k)

{cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 3:

cout<<\"==========按学号修改学生信息面板

第13页 共26页

=============\\n\";

cout<<\"请输入待修改的学生的工号:\"; cin>>stuNum;

FindFromNum(head, stuNum, preNode, curNode); Modify(curNode->data);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k;

if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 4:

cout<<\"==========输出学生信息列表面板=============\\n\"; OutputStu(head);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 5:

cout<<\"==========按学号查询输出学生信息=============\\n\";

cout<<\"请输入要查询的学生的学号:\"; cin>>stuNum;

FindFromNum(head, stuNum, preNode, curNode);

cout<<<data);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

第14页 共26页

break; case 6:

cout<<\"=========统计学生缺课信息列表面板==========\\n\"; preNode = head; while(preNode) {

curNode = preNode->next;

if(curNode && !strcmp(curNode->data.courseType, queke[0]))

chidaoCount++;

if(curNode && !strcmp(curNode->data.courseType, queke[1]))

zaotuiCount++;

if(curNode && !strcmp(curNode->data.courseType, queke[2]))

kuangkeCount++;

if(curNode && !strcmp(curNode->data.courseType, queke[3]))

qingjiaCount++; preNode = curNode; }

cout<<\"迟到的学生有 \"<cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break;

default:

cout<<\"输入不合法\\n\";

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break;

第15页 共26页

} } }

return 0; return 0; }

第16页 共26页

2.5 测试 输入学生信息

录入学生信息

第17页 共26页

查询学生信息

修改学生信息

统计学生信息

第18页 共26页

3 总结

本次实验是我上大学以来做的第二个课程设计,虽然平时也做过许多的实

验,但是题目刚拿到手时仍然是手足无措,不知从何下手,首先面对的是编写程序的问题,面向对象的程序设计思想是我们这学期C++课程的主要内容,但我的底子薄,掌握的不是很好,所以运用起来有些困难;其次是以前没做过课程设计,有关课程设计方面的一些问题,例如,课程设计都包括哪些内容,需要写些什么,我都不是非常清楚。后来在老师、同学以及班导的帮助下,才对此有了一定的了解,有了属于自己的看法,不过程序编写过程中我也遇到了许多的麻烦,例如链表的使用,是上个学期最后的内容,不是很熟悉,经过反复的看书,终于得到了解决!

这次的课程设计是我真正发现在课堂上听懂是一回事,而当自己真正动手做时又是另外一回事。虽然最后问题都得到的解决,但未能实现保存文件,没能达到老师的要求,这也是本次课程设计的不足之处。

通过本次的课程设计,使我能够进一步掌握用程序设计语言解决实际问题的方法,在操作当中把所学到的用于实际的编程里去。使我能够提高分析问题、查阅资料、吸收新知识的能力,在分析解决问题时比以前有了很大的进步,一些常用的知识和一些常规的错误都能够解决。我认为实践周的程序设计是给我们学习的一个大好机会,使我们在这样的机会里学到了一定的知识,毕竟理论要通过实践来锻炼,也只有自己参与了这样的一个锻炼,才能更好的发现自己的不足并加以改进和完善!我清楚的认识到自己在这方面的不足之处,在这方面可以说欠缺的知识还很多很多,不能编出完全符合要求的程序。在以后的学习中我会更加努力,争取能编出更加符合要求的程序,给自己的课程设计交上一份满意的答卷,也给自己一点小小的信心!

最后感谢老师、同学、班导、学长的帮助,谢谢你们!!!

参考文献

[1] 钱能. C++程序设计教程[M]. 北京:清华大学出版社,2005:315-324,415-418,423. [2] 刘瑞新. Visual C++面向对象程序设计教程[M]. 北京:机械工业出版社,2005.

第19页 共26页

附录A 源代码

//student.h文件 #include class Student{ public:

// 学生信息

char stuName[20]; int stuNum;

char stuClass[20]; // 缺课信息

char courseName[20];//缺课名称 int courseNum; // 第几节课

char courseType[20];//缺课类型 // 缺课日期 int year; int month; int day;

Student() {

memset(stuName, 0, sizeof(stuName)); stuNum = 0;

memset(stuClass, 0, sizeof(stuClass));

memset(courseName, 0, sizeof(courseName)); courseNum = 0;

memset(courseType, 0, sizeof(courseType)); year = 0; month = 0; day = 0; }

~Student() { } };

//studentManage.h文件 #include \"Student.h\" #include #include

//定义结点类型 struct Node {

第20页 共26页

Student data; Node *next; };

typedef Node *node; // 类型定义node为指向Node结构的指针类型 /*

* 创建链表用来存储学生信息 */

bool CreateList(node &L) {

L = new Node; // 动态分配内存,创建链表头结点 if(!L) {

// 内存分配失败 return false; }

L->next = NULL; // 创建空链表成功,头结点指针域为空 return true; }

// 定义输入学生信息的方法 void InputStu(Student &stu) {

cout<<\"请输入学号:\"; cin>>stu.stuNum;

cout<<\"请输入学生姓名:\"; cin>>stu.stuName;

cout<<\"请输入学生班级:\"; cin>>stu.stuClass;

cout<<\"请输入学生缺课名称:\"; cin>>stu.courseName;

cout<<\"请输入学生缺的第几节课:\"; cin>>stu.courseNum;

cout<<\"请输入学生缺课类型:\"; cin>>stu.courseType;

cout<<\"请输入学生缺课日期:\"<>stu.year;

第21页 共26页

}

// 添加结点,非降序插入学生的信息

void InsertAscend(node L, Student stu) {

node preNode = L; // preNode指向链表L的头结点

node curNode = L->next; // curNode指向链表L的第一个结点

// 第一个结点不为空,且worker.num大于curNode->data.num,则执行循环

while(curNode && (stu.stuNum > curNode->data.stuNum)) {

preNode = curNode;

curNode = curNode->next; }

// 插入新结点

preNode->next = new Node; preNode->next->data = stu;

preNode->next->next = curNode; }

// 打印一个student的信息 void print(Student stu) {

cout<<<// 输出学生信息列表 void OutputStu(node L) {

node tmp = L->next;

cout<<cout<<\"请输入月:\"; cin>>stu.month; cout<<\"请输入日:\"; cin>>stu.day;

第22页 共26页

{

print(tmp->data); tmp = tmp->next; } }

// 按学号号查找,用curNode返回查找到的结点的指针 // preNode指向curNode所指向的结点的前面一个结点

bool FindFromNum(node L, int stuNum, node &preNode, node &curNode) {

preNode = L; while(preNode) {

curNode = preNode->next;

// 链表是按学号号非降序添加结点建立的

// curNode->data.num大于num则不需要再往后遍历 if(curNode && (curNode->data.stuNum > stuNum)) break;

if(curNode && (stuNum == curNode->data.stuNum)) // 找到匹配的结点

return true;

preNode = curNode; // preNode指向下一个结点 }

return false; }

// 按学号号删除结点

bool DelFromNum(node L, int stuNum) {

node preNode, curNode;

if(FindFromNum(L, stuNum, preNode, curNode)) // 用curNode返回要删除的结点 {

// 删除结点

preNode->next = curNode->next; delete curNode; return true; }

return false; }

// 修改学生信息

第23页 共26页

void Modify(Student &stu) {

InputStu(stu); }

// 按学生缺课类型查找,用curNode返回查找到的结点的指针 // preNode指向curNode所指向的结点的前面一个结点

bool FindFromName(node L, char courseType[], node &preNode, node &curNode) {

preNode = L; while(preNode) {

curNode = preNode->next;

if(curNode && !strcmp(curNode->data.courseType, courseType)) // 找到与courseType匹配的结点 return true; preNode = curNode; }

return false; }

//studentManage.cpp文件

#include \"StudentManage.h\" int main() {

int n, i, k;

int stuNum; // 学号 char stuName[20]; char stuType[20];

node head, preNode, curNode; Student stu; int order;

int chidaoCount = 0; int zaotuiCount = 0; int kuangkeCount = 0; int qingjiaCount = 0;

char *queke[4] = {\"迟到\早退\旷课\请假\

if(CreateList(head)) {

cout<<\"请输入待输入信息的学生个数:\";

第24页 共26页

cin>>n;

for(i=0; icout<<\"请输入第 \"<InsertAscend(head, stu); }

cout<<\"您输入了 \"<while(1) {

cout<<\"===========欢迎进入学生考勤管理系统====================\\n\";

cout<<\"1:新增学生信息(非降序插入) 2:按学号删除学生信息\\n\";

cout<<\"3:按学号修改学生信息 4:输出学生信息列表\\n\"; cout<<\"5:按学号查询输出学生信息\\n\"; cout<<\"6:统计学生缺课信息列表\\n\";

cout<<\"请选择要执行的功能指令:(菜单指令如上)\"<cout<<\"=======================================================\\n\";

cin>>order; switch(order) {

case 1:

cout<<\"==========新增学生信息面板(非降序插入)=============\\n\";

InputStu(stu);

InsertAscend(head, stu);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 2:

cout<<\"==========按学号删除学生信息=============\\n\"; cout<<\"请输入要删除的学生的学号:\"; cin>>stuNum;

DelFromNum(head, stuNum);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\";

第25页 共26页

cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 3:

cout<<\"==========按学号修改学生信息面板=============\\n\";

cout<<\"请输入待修改的学生的工号:\"; cin>>stuNum;

FindFromNum(head, stuNum, preNode, curNode); Modify(curNode->data);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k;

if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 4:

cout<<\"==========输出学生信息列表面板=============\\n\"; OutputStu(head);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 5:

cout<<\"==========按学号查询输出学生信息=============\\n\";

cout<<\"请输入要查询的学生的学号:\"; cin>>stuNum;

FindFromNum(head, stuNum, preNode, curNode);

cout<<第26页 共26页

<data);

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; case 6:

cout<<\"=========统计学生缺课信息列表面板==========\\n\"; preNode = head; while(preNode) {

curNode = preNode->next;

if(curNode && !strcmp(curNode->data.courseType, queke[0]))

chidaoCount++;

if(curNode && !strcmp(curNode->data.courseType, queke[1]))

zaotuiCount++;

if(curNode && !strcmp(curNode->data.courseType, queke[2]))

kuangkeCount++;

if(curNode && !strcmp(curNode->data.courseType, queke[3]))

qingjiaCount++; preNode = curNode; }

cout<<\"迟到的学生有 \"<cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break;

default:

第27页 共26页

} } }

return 0; return 0; }

cout<<\"输入不合法\\n\";

cout<<\"是否返回系统菜单?(是输入0,否输入1退出系统)\\n\"; cin>>k; if(k) {

cout<<\"您已退出学生考勤管理系统\\n\"; return 0; }

break; 第28页 共26页

因篇幅问题不能全部显示,请点此查看更多更全内容