C++课程设计实训报告
南阳理工学院·软件学院
课程设计报告
课程名称: |
C++面向对象程序设计(课程设计) |
课题名称: |
新生基本信息统计软件 |
姓 名: |
|
学 号: |
|
专 业: |
软件工程 |
年 级: |
2021级 |
指导教师: |
2021年12月
一,课程设计目的
选择这个课程设计是因为有我们现在有比较密切的关系,可以了解我们学生自己个人信息的管理与录入是怎样的过程,而且C++是实践性很强的课程。课程设计是加强我们实践能力的一个强有力手段。要求我们在完成程序设计的同时能够写出比较规范的设计报告。学生管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生管理系统应该能够为用户提供充足的信息和快捷的查询手段。但一直以来人们使用传统人工的方式管理文件,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。在各大中小学校,用计算机管理学校的信息已经越来越普遍了。用计算机不但可以提高工作效率,而且还节省了许多人力物力,增强了学校资料的安全性。提高了学校的管理能力,为此,用计算机来管理学校的信息,是非常必要的。
二,课程设计内容
- 课程设计的题目及简介
题目:新生基本信息统计软件
有新生来报到,要逐个录入其信息,如:学生姓名,性别,专业,出生日期,家庭地址,英语入学成绩。要求设计链表类来实现,并统计学生人数。
简介及要求:
① 新增学生信息
② 删除学生信息
③导入学生信息(已经保存于的文件信息)
④ 学生信息搜索(按姓名)
⑤ 学生信息统计(按专业或性别或年龄---年龄要自动计算)
⑥ 按英语成绩排序
⑦学生信息保存
⑧ 退出
2、设计说明
①类设计
设计了一个人类和学生类
Class person
Class student
学生类继承人类
②函数设计
一共涉及12个函数
分别是
void create();//建立链表
void find();//查找函数
void add();//增加函数
void modify();//修改学生信息
void bianli();//遍历函数
void delet();//删除函数
void paixu();//排序函数
void census();//按性别统计人数
void read();//读取文件信息函数
void save();//信息保存到文件函数
int fangzhichongfu(int n);//防止学号重复
void show();//菜单
3,程序流图
4、程序清单
①先设计一个人类
class person//人类
{
public:
person()
{
a=1;
}
~person(){};
virtual void setb()
{
b=1;
}
private:
int a,b;
};
②再定义学生类
class student:public person //学生类继承人类
{
public:
student()//初始化头结点并给其申请空间
{
head=new STU;head->next=NULL;
}
void create();//建立链表
void find();//查找函数
void add();//增加函数
void modify();//修改学生信息
void bianli();//遍历函数
void delet();//删除函数
void paixu();//排序函数
void census();//按性别统计人数
void read();//读取文件信息函数
void save();//信息保存到文件函数
int fangzhichongfu(int n);//防止学号重复
void show();//菜单
~student(){};
private:
STU *head;
STU *tail;
};
③构建学生信息结构体
typedef struct StuNode//学生信息的结构体
{
int num;
string name;
string sex;
int english;
string major;
string address;
StuNode *next;
}STU;
④主函数
int main()
{
student gn;
while(1)
{
gn.show();
char select[128];
cout<<"请输入调用功能"<<endl;
cin>>select;
int a=strlen(select);
if(a==1)
{
switch(select[0])
{
case '1':system("cls");gn.create();break;
case '2':system("cls");gn.delet();break;
case '3':system("cls");gn.read(); break;
case '4':system("cls");gn.find();break;
case '5':system("cls");gn.census();break;
case '6':system("cls");gn.paixu();break;
case '7':system("cls");gn.save();break;
case '8':system("cls");gn.add();break;
case '9':return 0;
}
}
else if(a>=2&&a<=3)
{
switch(select[0]+select[1])
{
case 'a':system("cls");gn.modify();break;
case 'b':system("cls");gn.bianli();break;
default:system("cls");printf("输入指令错误\n");system("pause");break;
}
}
else if(a>3)
{
printf("指令错误\n");
system("pause");
}
}
}
⑤菜单
void student::show()//菜单显示函数
{
cout<<"*************************************************"<<endl;
cout<<" 1. 创建一个学生链表 "<<endl;
cout<<" 2. 删除学生信息 "<<endl;
cout<<" 3. 导入学生信息 "<<endl;
cout<<" 4. 学生信息搜索 "<<endl;
cout<<" 5. 统计学生人数 "<<endl;
cout<<" 6. 按英语成绩排序 "<<endl;
cout<<" 7. 学生信息保存 "<<endl;
cout<<" 8. 增加学生信息 "<<endl;
cout<<" 9. 退出系统 "<<endl;
cout<<" 10. 修改学生信息 "<<endl;
cout<<" 11. 遍历链表数据 "<<endl;
cout<<" 请选择:"<<endl;
}
⑥建立链表创建学生信息
void student::create()//链表的建立函数
{
tail=head;
STU *p,*bl;
bl=head;
int n;
int h;//此处不会用c++清除缓存防止输入人数时乱输用c代替
tt:printf("请输入学生个数\n");
h=scanf("%d",&n);
if(h!=1)
{fflush(stdin);
goto tt;
}
for(n;n>0;n--)
{
p=new STU;//给p申请个结构体大小的空间
int m;
while(1)
{
cout<<"请输入学号"<<endl;
cin>>p->num;
m=fangzhichongfu(p->num);
if(m==0)
{cout<<"输入学号重复请重输入"<<endl;
continue;
}
else
break;
}
cout<<"请输入名字"<<endl;
cin>>p->name;
cout<<"请输入性别性别只存在 男 m 女 w"<<endl;
string j="m";//这里可以限制性别只为男女
string q="w";
while(1)
{
cin>>p->sex;
if(!strcmp(p->sex.c_str(),j.c_str()))
break;
else if(!strcmp(p->sex.c_str(),q.c_str()))
break;
else
{printf("你输入了新物种请重新输入\n");
continue;}
}
cout<<"请输入英语成绩"<<endl;
cin>>p->english;
cout<<"所选专业:"<<endl;
cin>>p->major;
cout<<"请输入家庭住址"<<endl;
cin>>p->address;
p->next=NULL;//
tail->next=p;//让tail的指针域指向p
tail=p;//让p变成tail可以连接下一次循环
}
cout<<"创建链表成功" <<endl;
system("pause"); }
⑦遍历函数
void student::bianli()//遍历函数
{ STU *bl;
bl=head->next;
while(bl)
{ cout<<"学号:"<<bl->num<<"\t";
cout<<"姓名:"<<bl->name<<"\t";
cout<<"性别:"<<bl->sex<<"\t";
cout<<"英语成绩:"<<bl->english<<"\t";
cout<<"所选专业:"<<bl->major<<"\t";
cout<<"家庭住址:"<<bl->address<<endl;
bl=bl->next;
}system("pause");
}
⑧查找学生信息
void student::find()//查找函数
{ STU *f;
f=head->next;//定义一个f指针指向head后面的节点
STU *q;
q=head->next;
if(q==NULL)
{
cout<<"暂无学生信息请指令功能一后调用此功能\n"<<endl;
system("pause");
return;
}
string fname;
cout<<"请输入所要查询的学生姓名"<<endl;
cin>>fname;
while(f)
{
if(!strcmp(fname.c_str(),f->name.c_str()))//比较所找名字与链表中的名字
{ cout<<"学号:"<<f->num<<"\t";
cout<<"姓名:"<<f->name<<"\t";
cout<<"性别:"<<f->sex<<"\t";
cout<<"英语成绩:"<<f->english<<"\t";
cout<<"所选专业:"<<f->major<<"\t";
cout<<"家庭住址:"<<f->address<<endl;}
f=f->next; //使其遍历链表
} system("pause");
}
⑨修改学生函数
void student::modify()//修改学生信息函数
{ STU *mod;
mod=head->next;
if(mod==NULL)
{
cout<<"暂无学生信息请指令功能一后调用此功能\n"<<endl;
system("pause");
return;
}
int numm;
cout<<"请输入所要修改的学生的学号"<<endl;
cin>>numm;
while(mod)
{
if(numm==mod->num)
{
cout<<"请重新输入学号"<<endl;
cin>>mod->num;
cout<<"请重新输入名字"<<endl;
cin>>mod->name;
cout<<"请重新输入性别性别只存在 男 m 女 w"<<endl;
string j="m";
string q="w";
while(1)
{
cin>>mod->sex;
if(!strcmp(mod->sex.c_str(),j.c_str()))
break;
else if(!strcmp(mod->sex.c_str(),q.c_str()))
break;
else
{printf("你输入了新物种请重新输入\n");
continue;}
}
cout<<"重新请输入英语成绩"<<endl;
cin>>mod->english;
cout<<"重新输入所选专业:"<<endl;
cin>>mod->major;
cout<<"请重新输入家庭住址"<<endl;
cin>>mod->address;
break;
}
else
mod=mod->next;
}
cout<<"修改成功" <<endl;
system("pause");
}
⑩增加学生信息
void student::add()//增加学生信息函数
{
if(head->next==NULL)
{
cout<<"请先导入学生信息或者创建一个学生链表"<<endl;
}
else
{
STU* f=head;
STU* p=new STU;//增加学生信息需要一个有空间的指针接收学生信息并插入到链表当中
cout<<"请输入你想添加的学生信息"<<endl;
int m;
while(1)
{
cout<<"请输入学号"<<endl;
cin>>p->num;
m=fangzhichongfu(p->num);
if(m==0)
{cout<<"输入学号重复请重输入"<<endl;
continue;
}
else
break;
}
cout<<"请输入名字"<<endl;
cin>>p->name;
cout<<"请输入性别性别只存在 男 m 女 w"<<endl;
string j="m";
string q="w";
while(1)
{
cin>>p->sex;
if(!strcmp(p->sex.c_str(),j.c_str()))
break;
else if(!strcmp(p->sex.c_str(),q.c_str()))
break;
else
{printf("你输入了新物种请重新输入\n");
continue;}
}
cout<<"请输入英语成绩"<<endl;
cin>>p->english;
cout<<"所选专业:"<<endl;
cin>>p->major;
8cout<<"请输入家庭住址"<<endl;
cin>>p->address;
while(f->next!=NULL)//这个地可以让f指针指向尾节点增加学生信息时直接插入到尾节点
{
f=f->next;
tail=f;
}
tail->next=p;//让tail的指针域指向p;
tail=p;//使p便成尾节点;
p->next=NULL;
cout<<"添加成功"<<endl;
}
}
⑪删除学生信息
void student::delet()//删除学生信息函数
{ if(head->next==NULL)
{
cout<<"空链表无学生信息返回主菜单"<<endl;
system("pause");
return;
}
STU *de1,*de2;
de1=head;
de2=head->next;
int n;
cout<<"请输入所要删除学生的学号"<<endl;
cin>>n;
while(de2)
{
if(n==de2->num)
{
int quxiao;
cout<<"是否确定删除该学生信息按1确定按0取消"<<endl;
cin>>quxiao;
if(quxiao==0)
break;
de1->next=de2->next;//如果找到学生信息使该节点前一个节点指向该节点后一个节点;
delete de2;//释放该节点
de2=NULL;
break;
}
else
{
de1=de2;
de2=de2->next;
}
}
cout<<"删除成功"<<endl;
system("pause"); }
⑫按照英语成绩排序
void student::paixu()//排序函数
{
STU *p,*q,*r,*w;
p=head;
q=head->next;
if(p->next==NULL){
printf("无学生信息");
system("pause");
return ;}
while(p->next!=NULL)
{ while(q->next!=NULL)
{
if(p->next->english<q->next->english)//排序根据冒泡排序的方式进行; {
r=p->next;//使定义的一个容器指针接收p的指针域数据
p->next=q->next;//让p的指针域接收q的指针域;
q->next=q->next->next;//让q的指针域接收q后面的节点的指针域;
p->next->next=r;
}
else
{
q=q->next;
}
}
p=p->next;//移动排序
q=p->next;
}
w=head->next;
cout<<"按英语成绩排名如下"<<endl;
while(w)
{
cout<<"学号:"<<w->num<<"\t";
cout<<"姓名:"<<w->name<<"\t";
cout<<"性别:"<<w->sex<<"\t";
cout<<"英语成绩:"<<w->english<<"\t";
cout<<"所选专业:"<<w->major<<"\t";
cout<<"家庭住址:"<<w->address<<endl;
w=w->next;
}
system("pause");
}
⑬统计学生信息
void student::census()//统计学生人数函数
{
cout<<"********************************"<<endl;
cout<<" 1.输出当前所有学生数量 "<<endl;
cout<<" 2.输出你所要查询性别的人数 "<<endl;
cout<<"********************************"<<endl;
char cen[10];
cout<<"请输入选择的功能"<<endl;
cin>>cen;
if(cen[0]=='1')
{
int tt=0;
STU *t;
t=head->next;
while(t)
{
tt++;
t=t->next;
}
cout<<tt<<endl;
system("pause");
}
else if(cen[0]=='2')
{
STU *tj;
tj=head->next;
if(tj==NULL)
{
cout<<"暂无学生信息请指令功能一后调用此功能\n"<<endl;
system("pause");
return;
}
int sexshu=0;
string fname;
cout<<"请输入所要查询的学生性别"<<endl;
cin>>fname;
while(tj)
{
if(!strcmp(fname.c_str(),tj->sex.c_str()))
{
sexshu++;
}
tj=tj->next;
}
cout<<"统计该性别人数为"<<sexshu<<endl;
system("pause");
}
else
cout<<"输入指令有误"<<endl;
}
⑭文件
void student::save()//学生信息的保存函数
{
ofstream of1;//定义一个写的文件指针
of1.open("D:\\caozuo.txt",ios::out);//打开一个文件
if(!of1.is_open())
{
cout<<"open caozuo.txt error!"<<endl;
}
else
{
STU* s=head->next;
while(s)
{
of1<<s->num<<" "<<s->name<<" "<<s->sex<<" "<<s->english<<" "<<s->major<<" "<<" "<<s->address<<endl;
s=s->next;
}
of1.close();//关闭文件
}ofstream of2;
of1.open("D:\\guankan.txt",ios::out);
if(!of1.is_open())
{
cout<<"open guankan.txt error!"<<endl;
}
else
{
STU* b=head->next;
while(b)
{
of1<<"学号:"<<b->num<<" "<<"姓名:"<<b->name<<" "<<"性别"<<b->sex<<" "<<"英语成绩:"<<b->english<<" "<<"专业:"<<b->major<<" "<<"家庭住址"<<b->address<<endl;
b=b->next;
}
of1.close();
}
cout<<"保存成功!"<<endl;
system("pause");
}
⑮导入学生信息
void student::read()//学生信息的导入函数
{
ifstream ifs;//定义一个读文件的指针
ifs.open("D:\\caozuo.txt",ios::in); //以读的方式打开文件
if(!ifs.is_open())
{
cout<<"open caozuo.txt error!"<<endl;
}
STU* p;
p=head;
while(!ifs.eof())
{
STU* s=new STU;
ifs>>s->num>>s->name>>s->sex>>s->english>>s->major>>s->address;
if(ifs.get()==-1)
{
break;
}
p->next=s;
p=s;
p->next=NULL;
}
ifs.close();
cout<<"读取成功!"<<endl;
}
分析与讨论
在本次设计的全过程中,我对所学的知识有了一个比较系统的认识和理解。涉及了各方面的知识,大大扩展了我的知识面,同时是我学会了如何使用所学的知识去解决一些实际的问题此系统是,这是一个简单的学生管理系统,它的有点在于简单明了,容易上手操作,便于修改内容,系统代码也比较容易修改,缺点是功能不是很强大,而且代码有些地方比较繁琐,确实仅仅是一个设计,在教学实际用途中还是有一定的技术差距。
在设计中我深知自己掌握的知识还远远不够,掌握的一些理论知识应用到实践中去,总会出现这样或那样的问题,不是理论没有掌握好,而是光知道书本上的知识是远远不够的,一定要把理论知识和实践结合起来。把学到的知识应用到时间中去,多做多练,才可以把理论的精华发挥出来。知识不是知道,了解就好,一定要去应用它,发展它,让它在现实生活中得到充分的应用,从而解决一些问题,这才是学习的根本目的。而且知识又不是单一的,它是互相联系的,学科与学科之间都有着内在的联系。计算机是一门非常复杂且庞大的学科,一项课题往往需要多项技术才可以完成的。在设计阶段,通过对课题的深入分析与研究,迫使我对技术有了一定的了解。在遇到问题时,得到了指导老师与同学的悉心帮助,使我感受到集体的力量是无穷的。
结语
通过这次设计,我学到了许多书本上学不到的知识,增强了自己的动手能力。但由于自己的知识水平有限,仍然存在很多的不足之处,恳请老师多多指教!当今的社会是竞争的社会,而人才的竞争则是竞争的焦点。 计算机技术的高速发展,使我深深地认识到只有不断的加强学习,才能在计算机技术方面不至于被淘汰,今后,我还要加强学习,努力使自己成为一位专业的计算机人员,为我自己所从事的工作服务。
C++课程设计实训报告相关推荐
- 【数据结构】-大二数据结构与算法课程设计实训报告
采花生问题 1.1 需求分析 1.1.1 题目概要 给一矩阵,按贪心思路最多能采多少花生并在规定时间内返回. 1.1.2 题目要求 给定一块花生田的大小和花生的分布,在限定时间内,小Q最多可以采到多少 ...
- C++课程设计实训_基于多态书籍信息管理系统的设计与实现、附源码、有过程截图
C++课程设计实训_基于多态书籍信息管理系统的设计与实现.附源码,有过程截图 书籍信息管理系统的设计与实现(基于多态) 学生姓名: 学 号: 指导老师: 所 在 系: 专 业: 班 级: C++课程设 ...
- c语言编程TLC2543AD采集,基于C语言的89C51与TLC2543AD转换器的驱动程序的设计 实训报告...
电子信息技术综合实训报告 竞赛题名称:基于C语言的89C51与TLC2543AD转换器的驱动程序的设计 队员名称: 评阅人签名:设计思路描述: 设计思路: 硬件部分基于80C51单片机和TLC2543 ...
- android课程设计实训目的,汽车专业实习目的与意义
实习目的及意义 1.通过生产实习加深对汽车运用与维修专业认识,巩固专业思想,激发学习热情. 2.熟悉汽车修理环境.修理工具.为以后走上工作岗位积累一定的知识与经验. 3.开拓我们的视野,增强专业意识, ...
- html网站设计项目心得,网页设计制作心得体会,网页设计实训报告步骤
1. 吸引眼球第一步,页面体例鲜活.上网页体式格局要重点正常一个"新"字,联络自身的理论情形创立一个并世无双的网站.若是网站方式陈旧看法就无新意可言.选材要偏激做到"少& ...
- 【C语言】课程设计实训——人事管理系统
目录 题目: 总体设计 详细设计 系统实现 题目 1.需求分析 人事档案信息采用文件存储,要提供文件的输入输出操作:根据学院人事的变动情况,可添加或删除记录,因而要提供文件的添加删除操作:能根据编号和 ...
- 课程设计实训-3 英文词典
问题及代码 做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文与释义间用'\t'隔开.编程序,将文件中的内容读到两个数组e[]和c[]中, ...
- 计算机综合能力描述,计算机综合应用能力实训报告
<计算机综合应用能力实训报告>由会员分享,可在线阅读,更多相关<计算机综合应用能力实训报告(9页珍藏版)>请在人人文库网上搜索. 1.计算机综合应用能力实训报作 者:学 院:四 ...
- 建筑施工与管理计算机综合应用能力实训报告,建筑施工管理计算机综合应用能力实训报告...
<建筑施工管理计算机综合应用能力实训报告>由会员分享,可在线阅读,更多相关<建筑施工管理计算机综合应用能力实训报告(12页珍藏版)>请在人人文库网上搜索. 1.中央广播电视大学 ...
最新文章
- 高德sdk定位当前位置_单次定位-获取位置-开发指南-iOS 定位SDK | 高德地图API
- linux shell 合并多个文件 并删除重复行
- 在 C++ 中实现一个轻量的标记清除 gc 系统
- 计算机网络——零碎知识点
- java 当地时间_【JAVA】获取当地时间
- 1048 行 MySQL指令(经典)
- 【Linux】Linux中文本编辑器和系统管理命令
- [原创]数据库视图介绍和使用
- 智能优化算法:海洋捕食者算法
- Lucas(卢卡斯)定理---组合数取模问题
- Python表白代码:“ 星光月夜烟花皆归你,我也归你”(满天烟花盛开、附番外玫瑰)
- Failed to instantiate [org.springframework.cloud.context.properties.ConfigurationPropertiesBeans]: F
- 工具学习——介绍几个C++项目可用的UML工具
- 计算机视觉知识体系图,计算机视觉系统框架的新构思
- 如何快速查找综述类论文
- 蒙特梭利素材语言幼儿识字 补笔画 闪卡三段卡蒙氏教具
- 运筹说 第47期 | 算法介绍之目标规划
- 怎么在视频中截取音频作为手机铃声?
- linux查看系统所有变量,Linux系统各指标命令
- 计算机基础操作(计算机硬件知识)