省赛结束了,还没缓过来呢,下次再补上一篇省赛总结,今天先来说说这次的暑期实训吧:
一、目的与要求:
1、目的:
(1)要求学生达到熟练掌握c++语言的基本知识和技能;
(2)基本掌握面向对象程序设计的基本思路和方法;
(3)能够利用所学的基本知识和技能,解决简单的面向对象程序设计问题。
2、基本要求:
(1)要求利用面向对象的方法以及c++的编程思想来完成系统的设计;
(2)明确实训任务,复习与查阅有关资料,建立清晰的类层次,在系统中至少要定义一个类,类中要有各自的属性和方法;在系统的设计中,至少要用到面向对象的一种机制。
(3)对应用程序的要求:
a.凡等候用户输入时,给出足够的提示信息,如“请选择(1 借书 2 还书……):”提示用户选择。
b.程序具有一定的健壮性,不会因为用户的输入错误引起程序运行错误而中断执行。对输入值的类型、大小范围、字符串的长度等,进行正确性检查,对不合法的输入值给出出错信息,指出错误类型,等待重新输入
c.对删除数据应给出警告。
3、创新要求:
在基本要求达到后,可进行创新设计,如根据查找结果进行修改、删除、添加的功能。
4、按要求完成实训内容,设计报告要求文字和图工整、思路清楚、正确。
5、分组:最多3人一组,也可以1人一组,每组一名组长,小组成员分工明确(设计报告前附加人物分工说明书),由组长负责人员调度安排和工作进度控制,以及设计报告中自我评分。
二、设计题目:
每组任选一个题目,具体说明见附录:
序号 | 课程设计项目名称 | 学时分配 | 分组人数 |
1 | 高校工资管理系统 | 10 | 1-3 |
2 | 机房机位预约模拟 | 10 | 1-3 |
3 | 自动售货机程序模拟 | 10 | 1-3 |
4 | 医院候诊管理系统 | 10 | 1-3 |
5 | 电梯问题 | 10 | 1-3 |
6 | 简单银行管理系统 | 10 | 1-3 |
三、设计步骤与方法:
1.需求分析:对用户提出的问题提出解决的办法和思路。
2.根据需求,分析系统中的各个实体之间的关系及其属性和行为,设计系统功能模块(系统流程图),并设计相应的类和界面。
3.根据基本思路,确定输入和输出,设计程序的算法。
4.确定用到的所有类的描述和定义(包括属性和方法),并设计测试程序来对类进行测试。
6.编辑、编译、调试程序,检验程序的可运行性。
嗯,指导书上表示这么讲,我就选了第一个:高校工资管理系统。用C++编码还算容易,遇到的困难主要有以下几点:
1、窗口界面不行。
2、文件操作接触的少。
3、stl还未熟练。
不过通过这次的实训,还真的是学到了些东西,先来说说txt的文件操作吧,以下是我程序中用到的几个段落:
//函数功能:将每一次修改的信息保存到txt文件中,将程序重启后可以继续以前的信息
void inputToFiles()
{
ofstream outOp;
outOp.open("inPut.txt");
outOp << passNumber <<endl;
outOp << nOfStaff <<endl;
for(int i=0;i<nOfStaff;i++)
{
outOp << staff[i].getName() <<endl;outOp << staff[i].getCardNumber() <<endl;
outOp << staff[i].getKey() <<endl;
outOp << staff[i].getNumber() <<endl;
outOp << staff[i].getWage() <<endl;
outOp << staff[i].getLastWorkload() <<endl;
}
outOp << staff[0].getSum() <<endl;
//结束文件关联
outOp.close();
}
//函数功能:从txt文件中读取已有数据
void getInformationFromFiles()
{
ifstream inOp;
inOp.open("inPut.txt");
inOp >> passNumber;
inOp >> nOfStaff;
//从文件中读入信息,来构建staff[]成员
int key,number,wage,last;
string name,card;
for(int i=0;i<nOfStaff;i++)
{
inOp >> name >> card;
inOp >> key >> number >>wage >>last;
People *now= new People(name,card,number,last,wage,key);
staff[i]=*now;
delete now;
}
long long sum=0;
inOp >> sum;
staff[0].addSum(sum);
inOp.close();
}
//函数功能:判断刚开始启动程序时txt文件中是否有信息
void filesDoing(int length)
{
//若文件信息为空,则判断当前为初次使用
if(length==0)
{
passWordSetting();
cout << "请添加成员信息及上学期成员工作量:" <<endl;
Init();
sort(staff,staff+nOfStaff);
for(int i=0;i<nOfStaff;i++)
staff[i].displayData(1);
//将修改过的数据输入到文件
inputToFiles();
printf("以上是全员信息 ");system("pause");
}
else
getInformationFromFiles();
}
//文件操作,判断文件是否为空,再判断是否要求读入
ifstream is;
is.open ("inPut.txt", ios_base::binary );
// get length of file:
is.seekg (0, ios_base::end);
int length = is.tellg(); // length 为0则文件为空
//文件操作结束
filesDoing(length);
里面的ifstream 和 ofstream(可以用iofstream)像类一样,可以创建对象,关联文件后输入输出到文件。
第二点学到的,算是string的操作吧:
string getPassword()
{
string tmp;
char ch;
while((ch=getch())!='\r')
{
if(ch=='\b')
{
putch(ch);
putch(' ');
putch(ch);
if(!tmp.empty())
tmp=tmp.erase(tmp.size()-1,1);
}
else if(isprint(ch))
{
putch('*');
tmp+=ch;
}
}
printf("\n");
return tmp;
}
算是密码加密方面的操作了,以前一直觉得输入密码很神奇,现在感觉自己也能写了,还能退格呢。。当然,还没有实现的便是如何按一下显示密码了,这个真的不知道怎么操作,有待提高!
由于实训还没有结束,后期再把代码贴到后续的博客中吧!