学生考勤管理系统课程设计报告1

更新时间:2023-09-06 10:48:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

南昌航空大学

面向对象程序课程设计(c++)

题目:班级考勤管理系统

院系 : 软件学院

班级 : 668

学号 : 668

姓名 : 帅哥

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

一.需求分析

功能需求:

1.录入班级信息; 2. 显示班级信息;

3. 录入学生的信息和缺勤记录;

4. 修改某个学生的信息和缺勤记录; 5. 查询某个学生的信息和缺勤情况; 6. 以文件的形式读写; 7. 系统以菜单方式工作; 数据需求

本系统主要涉及的数据有班级信息和学生信息及缺课信息类。班级信息包括班级的学号,班级的人数,学生缺课信息包括学生姓名,学号,专业,课程名称,缺课节次,学生缺课类型(迟到,早退,请假,旷课)。

二、系统的主要功能

(1). 录用班级信息记录,在class clas中成员函数void set(){}实现,按照用户提示

进行操作写入类中,显示在void display(){}中。

(2). 录入学生的信息和缺课记录,在class student中成员函数代码void input(){}实

现中。首先提示用户按照正确的格式进行学生缺课记录的录入,这个步骤比较简单,只需要不断地将记录的每个数据项存入结构体对应的成员中。

(3)、修改某个学生的缺课记录,在class student中成员函数void edt(){}实现。首先

必须查找到你所需要修改的哪位的学生全部缺课记录。可以设置下面这五个菜单供用户选择:1、学生学号2、学生姓名3、学生班级4、缺课课程5、缺课类型6、退出修改程序并返回系统主菜单。修改很简单,仅需要对该学生的某个部分进行替换即可。最后实现对所选记录的修改,完成后更新原有的学生记录。

(4)、查询某个学生的缺课情况,在class student中成员函数void search(){}实现。

可以对学生的学号进行查询,并输出学生信息和考勤的信息。

(5)、学生信息的保存运用文件来保存,在class student中成员函数 void wt(int &i){}

和 void rd(){}中实现。

三、类的设计

本系统设计了三个大类,一个是班级信息类(class clas),实现班级信息的录用,显示。另一个学生基本信息设置类(class student),实现学生信息课程的录用。最后一个学生考勤操作类(class records)实现考勤信息查询,显示,修改,保存等。在主函数中实现桌面菜单操作。

四、流程图

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

学生考勤系统结构图:

继承

最后为

main(){}

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

五、类具体设计实现及主函数实现

此程序运用多种条件语句,主体采用的是动态对象数组、指针。系统的设计采用了数组语句、选择语句和循环语句,在需要处理大量同类数据时,这样就使程序书写更加简洁。程序。选择语句多采用if多分支选择结构与switch语句。首先计算switch表达式,然后在caes子句中寻找值相等的常量表达式,并以此为入口符号,由此开始顺序执行。switch语句中,保证多分支情况的正确执行,在循环语句中,强制终止本层循环。保存和读取函数是典型的函数功能,一个程序是由若干个函数组成的,保存和读取函数是和其他函数互相调用的。

1. 编写头文件(类的声明写一个文件“ClaStu.h”)

// *************************

//头文件 ClaStu.h

//*************************

#include <string.h> #include <iostream.h> #include <iomanip.h> #include <fstream.h> #include <stdlib.h>

const int max=15;

class clas //班级信息基类 { public:

void setc(); //录用班级信息 void display(); //显示班级信息 int cnum; //班级编号 int pnum; //班级人数 };

class student //学生信息课程类 {

public:

void set(int b, char* s,char* l,char* c,int cno,int type); //传递学生信息

char cname[5],sname[5],lname[5]; //定义缺课课程名称,学生称名,学生类别名称 int snum ,cno,type; //定义学生学号,缺课节次,缺课类型 };

class records:public student ,clas //实现学生信息和考勤情况操作的类

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

public:

records() //构造函数 {

r=new student[max]; //动态建立两个基类对象数组,返回两个对象指针 p=new clas[max]; }

void input(); //录用学生课程考勤信息

void wt(int &i); // 信息以文件的形式保存 void rd(); // 信息以文件的形式读出 void pri(); // 显示学生课程考勤信息 void search(); // 查询学生考勤信息 void del(); // 删除学生考勤信息 void edt(); // 修改学生考勤信息

void wdt(int &n); // 修改信息以文件的形式保存 student *r; // 声明两个对象指针 clas *p;

static int n; // n为静态变量记录创建对象的个数, };

int records::n=0;

2. 编写cpp文件(类的实现)

自定义的包含文件一般都放在自己指定的目录中,所以在引用他们时,采用双引号以通知c 编译器在用户指定的目录下和当前目录下寻找包含文件。

#include”ClasStu.h”

void clas::setc() // 录用班级信息 {

cout<<"输入班级学号:"<<endl;

cin>>cnum;

cout<<"输入班级人数:"<<endl; cin>>pnum; }

void clas::display() //显示班级信息

{ cout<<"班级学号:"<<cnum<<endl; cout<<"班级人数:"<<pnum<<endl; }

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

void student::set(int b, char* s,char* l,char* c,int cno,int type) //传递学生信息 {

strcpy(cname,c); //缺课课程名称 strcpy(sname,s); //学生姓名 strcpy(lname,l); //学生类别 this->snum=b; //学生学号 this->cno=cno; //缺课节次 this->type=type; //缺课类型 }

void records:: wt(int & i) // 信息以文件的形式保存

{

ofstream outf; //声明一个流对象

if(i>0) // 判断是否是第一个数据,如果不是以追加文件尾的方式存储 outf.open("data.txt",ios::app);

else outf.open("data.txt",ios::out);//创建一个文件并以文件的方式存储

outf<<setw(6)<<n; // 以左边对齐6个字节方式存储

outf<<setw(6)<<r[i].snum<<setw(6)<<r[i].cno<<setw(6)<<r[i].type<<setw(1); outf<<setw(7); outf<<r[i].sname; outf<<setw(7); outf<<r[i].lname; outf<<setw(7); outf<<r[i].cname; outf.close(); }

void records::rd() //信息以文件的形式读出 {

ifstream inf; // 创建一个流对象

inf.open("data.txt"); // 打开创建的文件 int i=0; while(inf) //将文件里的数据读入内存 { inf>>n;

inf>>r[i].snum>>r[i].cno>>r[i].type>>r[i].sname>>r[i].lname>>r[i].cname; i++; } }

void records::wdt( int &i) //修改信息以文件的形式保存 {

ofstream outf("data.txt"); //同上面原理相同不在介绍

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

outf<<setw(6)<<n;

outf<<setw(6)<<r[i].snum<<setw(6)<<r[i].cno<<setw(6)<<r[i].type<<setw(1);

outf<<setw(7); outf<<r[i].sname; outf<<setw(7); outf<<r[i].lname; outf<<setw(7); outf<<r[i].cname; outf.close(); }

void records::input() //学生考勤系统的录用模块 {

for(int i=0;i<100;i++) {

char t1[5],t2[5],t3[5]; //创建字符数组保存输入的学生信息和课程 int t4,t5,t6; char yn;

cout<<"录入一条学生详细考勤记录:"<<endl;

cout<<"输入学生的学号,学生的姓名,专业,缺课课程,缺课节次和缺课类别(1.

迟到 2.早退 3.请假 4.旷课)。"<<endl;

cin>>t4>>t1>>t2>>t3>>t5>>t6; records::n++; cout<<endl;

r[i].set(t4,t1,t2,t3,t5,t6); cout<<n; char y; cout<<"保存? (y/n) "<<endl; cin>>y;

if(y=='y')wt(i);

cout<<"是否继续输入? (y/n) "<<endl; //判断是否再输入学生信息 cin>>yn;

if(yn=='y') continue; else break; } }

void records::pri() //学生考勤系统显示模块 {

if(n==0) {

cout<<" ------文件记录为空----"<<endl<<"-----请先输入数据保存在进行此次操作

-----"<<endl;

return; }

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

{

cout<<r[i].snum<<"\t"; cout<<r[i].sname<<"\t"; cout<<r[i].lname<<"\t"; cout<<r[i].cname<<"\t\t\t"; cout<<r[i].cno<<"\t\t";

switch(r[i].type) //缺课信息以整形数据保存,以字符输出

{

case 1:cout<<"迟到"<<endl;break; case 2:cout<<"早退"<<endl;break; case 3:cout<<"请假"<<endl;break; case 4:cout<<"旷课"<<endl;break; default:; } } }

void records::edt() //学生考勤系统修改模块 {

cout<<"请输入要修改缺课记录的学生的学号: "<<endl; int t1,t5,t6;

int tnum,flag=1,km,i;

char t2[5],t3[5],t4[5]; //创建字符数组保存输入的学生信息和课程 cin>>tnum;

for( i=0;i<n;i++) {

if(r[i].snum==tnum) {

cout<<"有您要查询的学生"; break; } }

if(!flag)

{cout<<"查无此学生!"<<endl; return ; }

t1=r[i].snum;

strcpy(t2,r[i].sname);

cout<<"学号 \t姓名 \t专业 \t缺课课程\t,缺课节次\t缺课类别(1.迟到 2.早退 3.

请假 4.旷课)。"<<endl;

for(int i=0;i<n;i++) //学生缺课信息数据输出,n为静态变量记录创建对象的个

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

strcpy(t3,r[i].lname); strcpy(t4,r[i].cname); t5=r[i].cno; t6=r[i].type;

cout<<"请输入要修改的项目:\n(1.学生学号 2.学生姓名 3.学生专业 4.缺课科目 5.缺课次数 6.缺课类型"<<endl; cin>>km;

switch(km) //控制修改的选项 {

case 1:

cout<<"请输入修改的学生学号: "<<endl; cin>>t1; break;

case 2: cout<<"请输入修改的学生姓名: "<<endl; cin>>t2; break; case 3:

cout<<"请输入修改的缺课课程: "<<endl; cin>>t3 ; break;

case 4: cout<<"请输入修改的学生专业: "<<endl; cin>>t4; break;

case 5: cout<<"输入修改的缺课课程次数:"<<endl; cin>>t5; break;

case 6: cout<<"请输入缺课类型: (1.迟到 2.早退 3.请假 4.旷课) "<<endl; cin>>t6; break; }

r[i].set(t1,t2,t3,t4,t5,t6); //输入学生信息到对象中去 char yn;

cout<<"保存修改? (y/n) "<<endl; cin>>yn;

if(yn=='n') wt(i); else return; }

void records::del()//学生系统删除模块 { int i;

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

cout<<"请输入要删除的记录的学号序号: (输入-1删除全部) "<<endl; int flag,k=1; cin>>flag;

for( i=0;i<n;i++) {

if(r[i].snum==flag) {

cout<<"有您要删除的学生"; records:: n--;

char yn;

cout<<"保存修改? (y/n) "<<endl; cin>>yn;

if(yn=='n') wdt( n); break; } }

if(!k)

{cout<<"查无您要删除的学生!"<<endl; return ; } }

void records::search()//学生统计模块 {

cout<<"请输入要查询的学生学号: "<<endl; int tnum,flag=1; cin>>tnum;

for(int i=0;i<n;i++) //查找学号 {

if(r[i].snum==tnum) { flag=0; if(!flag)

{ cout<<"找到您要查询的学生信息"<<endl;

cout<<"学号 \t姓名 \t专业 \t缺课课程\t,缺课节次\t缺课类别(1.迟到 2.早退 3.请假 4.旷课)。"<<endl;

cout<<r[i].snum<<"\t"; //输出查找的信息 cout<<r[i].sname<<"\t"; cout<<r[i].lname<<"\t"; cout<<r[i].cname<<"\t\t\t"; cout<<r[i].cno<<"\t\t";

switch(r[i].type)

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

{

case 1:cout<<"迟到"<<endl;break; case 2:cout<<"早退"<<endl;break; case 3:cout<<"请假"<<endl;break; case 4:cout<<"旷课"<<endl;break; }

break; } }

if(!flag)

{ cout<<"没有查到该学生的缺课记录!"<<endl; flag=1; } } }

void main() //主函数 {

records *t=new records(); t-> rd();

c2: cout<<"\t\t学生班级考勤管理系统 V1.0.0"<<endl // 主菜单设计有goto语句 <<endl

<<"功能列表:"<<endl

<<"1.显示班级记录"<<endl

<<"2.录入学生的缺课记录"<<endl; int w; cin>>w;

if(w==1) //显示班级记录 { t->p->setc();

cout<<"显示班级信息:"<<endl; t->p->display();

cout<<"是否返回(1为是)"<<endl; int q; cin>>q;

if(q==1) goto c2; }

Else //录入学生的缺课记录 {c1:

cout<<"\t\t学生考勤管理系统 V1.0.0"<<endl //子菜单学生考勤管理设计 <<endl

<<"功能列表:"<<endl

<<"1.显示所有学生缺课记录"<<endl <<"2.录入学生的缺课记录"<<endl

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

<<"3.查询某个学生的缺课情况"<<endl <<"4.修改某个学生的缺课记录"<<endl <<"5.删除某个学生的缺课记录"<<endl <<"6.退出系统"<<endl

<<"请选择: (1/2/3/4/5/6/7) "<<endl; int cho; cin>>cho;

if(cho==7) exit(0);

switch(cho) //控制学生考勤操作 {

case 1:t->pri();break;

case 2:t->input();cout<<t->n;break; case 3:t->search();break; case 4:t->edt();break; case 5:t->del(); break;

case 7:exit(0); }

cout<<"返回功能列表? (y/n) "<<endl; char yn; cin>>yn;

if(yn=='y')goto c1;

else if(yn=='n') exit(0); } }

六、系统运行结果样例

当用户执行程序时首先会出现如下界面也是主菜单界面:

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

输入1时进入班级界面,并进行班级信息输入及显示:

按1返回上一级菜单,按2进入学生考勤系统如图:

1

显示记录并返回在按

2

录用学生信息如图:

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

录用后显示:

文件内的数据:

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

其他功能都一样不一一列举调试

七、结束语

本次课程设计主要使用到了C++中的一些比较基本的算法,总体上感觉比之前做过的实验综合性比较强。在这里我主要总结一下我设计这个学生考勤管理系统的心得和在编译程序的过程中遇到的问题以及解决的办法。

为了使得程序的编写更加有条理,阅读更加明了,在写每个模块的时候都将自己的思路写在每个函数的第一行,告诉自己(读者)我这个函数将要做的是什么事情。这是一个很好的编程规范,值得继续发扬。

对于这次的程序的编写,花了不少时间,原因很可能是自己对C++的总体认知还不够,还有在上学期一个月对C++的学习知识量很有限,在编写调试的这个过程中很多新的语法知识都是在网上搜索的。

我学习编程一直有自己的一点想法:用任务来牵引,在实践中学习。也就是说,我没有按照某种固定的顺序去学习编程,而是经常有一些小的程序想法或是想编一个满足特定功能的程序。这样刚开始几乎每次都是在对所编程序一无所知的基础上进行,由简单到复杂,一个问题一个问题地去解决。当然,很多时候我失败了,但在这过程中,我学到了很多。问题一个个地解决,知识一点点地积累,经验一点点地丰富,想法一点点地成熟,成功概率也一点点地提高

最后,通过完成编程,我达到了:

1、加深对本课程理论知识的理解,提高实际应用能力;

2、树立自身对理论联系实际的工作作风、严肃认真的科学态度;

3、进一步训练和提高自身的分析设计能力、理论计算能力、实验研究能力、外文阅读、

查阅文献资料和文字表达等基本技能;

4、培养自身独立分析、解决实际问题的能力,培养自身的创新意识和创新能力。

以上是用工程多文件编写的,不用工程多文件的如下,其实是一个意思但我怕有的同学不懂多文件,说调试错误,以下源代码只需复制粘贴编译运行就可。

#include <string.h> #include <iostream.h> #include <iomanip.h> #include <fstream.h> #include <stdlib.h>

const int max=15;

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

class clas { public:

void setc() {

cout<<"输入班级学号:"<<endl;

cin>>cnum;

cout<<"输入班级人数:"<<endl; }

void display()

{ cout<<"班级学号:"<<cnum<<endl; cout<<"班级人数:"<<pnum<<endl; } cin>>pnum;

int cnum;

int pnum; };

class student { public:

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

void set(int b, char* s,char* l,char* c,int cno,int type) {

strcpy(cname,c); strcpy(sname,s);//

strcpy(lname,l); };

class records:public student ,clas { public:

}

this->snum=b; this->cno=cno;// this->type=type;

char cname[5],sname[5],lname[5]; int snum ,cno,type;//

records() {

r=new student[max];

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

p=new clas[max];

}

void input(); void wt(int &i); void rd(); void pri(); void search(); void del(); void edt();

void wdt(int &n);

student *r;

clas *p;

static int n; };

int records::n=0;

void records:: wt(int & i) {

c++课程设计,学生考勤管理系统,绝对可以运行,还有文件存储,有班级信息和学生信息及选课考勤,共有三个类

ofstream outf; if(i>0)

outf.open("data.txt",ios::app); else outf.open("data.txt",ios::out); cout<<n;

outf<<setw(6)<<n;

outf<<setw(6)<<r[i].snum<<setw(6)<<r[i].cno<<setw(6)<<r[i].type<<s

etw(1);

outf<<setw(7);

outf<<r[i].sname;

outf<<setw(7);

outf<<r[i].lname; outf<<setw(7); outf<<r[i].cname;

outf.close();

本文来源:https://www.bwwdw.com/article/qdyh.html

Top