2015C++暑期实训(上)

省赛结束了,还没缓过来呢,下次再补上一篇省赛总结,今天先来说说这次的暑期实训吧:

一、目的与要求:

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;
}
算是密码加密方面的操作了,以前一直觉得输入密码很神奇,现在感觉自己也能写了,还能退格呢。。当然,还没有实现的便是如何按一下显示密码了,这个真的不知道怎么操作,有待提高!

由于实训还没有结束,后期再把代码贴到后续的博客中吧!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值