基本问题程序设计2
最小数量要求:题1必做,题2~题4选一。
电子时钟类:
设计编写一个电子时钟类ElectronicClock,包含年、月、日、时、分、秒等属性。电子时钟类由时间类和日期类组合而成,实现并测试这个类。
类中包括的成员函数(要完成操作)有:
(1)构造函数;
(2)析构函数;
(3)对时间与日期进行校验的函数,当不正确时进行纠正与改错;
(4)对年、月、日、时、分、秒等属性进行增加n个单位的函数。
提示:
(1)对年、月、日、时、分、秒等属性进行增加n个单位,要注意不要超出范围,进行进位;
(2)电子时钟类有日期类与时间类组合而成。
#include
using namespace std;
class date
{
public:
int year,month,day;
date(int a,int b,int c):year(a),month(b),day(c){
}
friend void data_check();
friend void data_display(); //友元函数的作用就是提供直接访问对象的私有成员的接口
friend void data_add(); //由于显示,添加等功能都需要用到两个类的成员变量,所以使用友元函数
};
class time
{
public:
time(int x,int y,int z):hour(x),min(y),sec(z){
}
friend void data_check();
friend void data_display();
friend void data_add(int a1,int a2,int a3,int a4,int a5,int a6);
int hour,min,sec;
};
void data_check(date &m,time &n)
{
int c1,c2,c3,c4,c5;
int max;
while(c1||c2||c3||c4||c5) //原理:如果在检查某项时出现了错误,继续循环
{
if(n.sec>=60){
n.sec-=60;n.min++;c1=1;}else{
c1=0;}
if(n.min>=60){
n.min-=60;n.hour++;c2=1;}else{
c2=0;}
if(n.hour>=24){
n.hour-=24;m.day++;c3=1;}else{
c3=0;}
if(m.month>12){
m.month-=12;m.year++;c4=1;}else{
c4=0;}
switch(m.month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:max=31;break;
case 4:
case 6:
case 9:
case 11:max=30;break;
case 2:if(m.year%4!=0||(m.year/100)%4!=0){
max=29;}else{
max=28;}break;
}
if(m.day>max){
m.day-=max;m.month++;c5=1;}
else{
c5=0;}
}
}
void data_display(date &m,time &n)
{
cout<<"当前时间为:\n"<<m.year<<"-"<<m.month<<"-"<<m.day<<"\n"<<n.hour<<":"<<n.min<<":"<<n.sec<<endl;
}
void data_add(date &m,time &n,int a1,int a2,int a3,int a4,int a5,int a6)
{
m.year+=a1;m.month+=a2;m.day+=a3;
n.hour+=a4;n.min+=a5;n.sec+=a6;
data_check(m,n);
}
int main()
{
int p1,p2,p3,p4,p5,p6;
int x1,x2,x3,x4,x5,x6;
cout<<endl;
cout<<" ._________________. "<<endl
<<" | _______________ | "<<endl
<<" | I I | "<<endl
<<" | I 日历 I | "<<endl
<<" | I_____________I | "<<endl
<<" !_________________! "<<endl
<<endl
<<"输入当前年-月-日 时:分:秒"<<endl;
cin>>p1>>p2>>p3>>p4>>p5>>p6;
date d(p1,p2,p3);
time t(p4,p5,p6);
data_check(d,t);
data_display(d,t);
while(1)
{
cout<<endl;
cout<<"输入添加量:年-月-日 时:分:秒"<<endl;
cin>>x1>>x2>>x3>>x4>>x5>>x6;
data_add(d,t,x1,x2,x3,x4,x5,x6);
data_display(d,t);
}
return 0;
}
图书管理系统
图书管理系统是对学生信息和图书信息进行管理,学生基本信息包括学号,姓名,院系,最大借阅图书数量属性,图书基本信息中包括图书号,书名,作者,出版社,图书数量属性,要求输入、输出、修改、查询、删除以上信息功能, 实现并测试这个类。
类中包括的成员函数(要完成操作)有:
(1)添加学生信息函数;
(2)修改学生信息函数;
(3)删除学生信息函数;
(4)查看学生信息函数;
(5)查看学生自己借阅的数目信息函数;
(6)添加图书信息函数;
(7)修改图书信息函数;
(8)删除图书信息函数;
(9)查看图书信息函数。
提示:
(1)如果某个学生退学,就要清除他的信息;
(2)查看学生的信息和查看图书的信息两个功能基本相似;
(3)必须包括构造函数和析构函数;
(4)学生和图书的编号从1开始自动排序,由系统自动获取(用静态成员实现);
#include
#include
#include
using namespace std;
class student
{
protected:
int num1,max;
static int number1;
string name1,academy;
public:
student()
{
num1=0;
name1="z";
academy="z";
max=0;
}
void addstudent(); //添加
void changestudent(); //更改
void clearstudent(); //删除
void searchstudent(); //搜索
void searchmax(); //借阅数目
};
int student::number1=1;
student *s[100];
int k=1;
void student::addstudent() //添加学生
{
s[k]=new student;
cout<<"输入学生姓名_院系_最大借阅图书数量"<<endl;
s[k]->num1=number1;
number1++;
cin>>s[k]->name1>>s[k]->academy>>s[k]->max;
k++;
}
void student::changestudent() //修改学生
{
cout<<"输入学生学号:"<<endl;
int i;
cin>>i;
cout<<"输入学生姓名_院系_最大借阅图书数量:"<<endl;
cin>>s[i]->name1>>s[i]->academy>>s[i]->max;
}
void student::clearstudent() //删除学生
{
cout<<"输入学生学号:"<<endl;
int i;
cin>>i;
delete s[i];
}
void student::searchstudent() //搜索学生
{
cout<<"输入学生学号:"<<endl;
int i;
cin>>i;
cout<<"学号:"<<s[i]->num1<<endl;
cout<<"姓名:"<<s[i]->name1<<endl;
cout<<"院系:"<<s[i]->academy<<endl;
cout<<"最大借阅图书数量:"<<s[i]->max<<endl;
}
void student::searchmax() //借阅数目
{
cout<<"输入学生学号:"<<endl;
int i;
cin>>i;
cout<<"剩余借阅量:"<<endl;
cout<<s[i]->max<<endl;
}
class book
{
protected:
int num2,sum;
static int number2;
string writer,name2,publish;
public:
book()
{
num2=0;
sum=0;
writer="0";
name2="0";
publish="0";
}
void addbook();
void changebook();
void clearbook();
void searchbook();
};
int book::number2=1;
int z=1;
book *a[100];
void book::addbook() //添加
{
a[z]=new book;
cout<<"输入书名 作者 出版社 图书数量"<<endl;
a[z]->num2=number2;
number2++;
cin>>a[z]->name2>>a[z]->writer>>a[z]->publish>>a[z]->sum;
z++;
}
void book::changebook() //修改
{
int j;
cout<<"输入图书号"<<endl;
cin>>j;
cout<<"输入书名 作者 出版社 图书数量"<<endl;
cin>>a[j]->name2>>a[j]->writer>>a[j]->publish>>a[j]->sum;
}
void book::clearbook() //
{
cout<<"输入图书号"<<endl;
int j;
cin>>j;
delete a[j];
}
void book::searchbook() //搜索
{
cout<<"输入图书号"<<endl;
int j;
cin>>j;
cout<<"书名:"<<a[j]->name2<<endl;
cout<<"作者:"<<a[j]->writer<<endl;
cout<<"出版社:"<<a[j]->publish<<endl;
cout<<"图书数量:"<<a[j]->sum<<endl;
}
int main()
{
student s;
book n;
while(1)
{
int m;
cout<<endl;
cout<<" ._________________. "<<endl
<<" | _______________ | "<<endl
<<" | I I | "<<endl
<<" | I图书管理系统 I | "<<endl
<<" | I_____________I | "<<endl
<<" !_________________! "<<endl
<<endl<<" (1) 添加学生信息 "<<endl
<<" (2) 修改学生信息 "<<endl
<<" (3) 删除学生信息 "<<endl
<<" (4) 查看学生信息 "<<endl
<<" (5) 查看学生借阅数目 "<<endl
<<" (6) 添加图书信息 "<<endl
<<" (7) 修改图书信息 "<<endl
<<" (8) 删除图书信息 "<<endl
<<" (9) 查看图书信息 "<<endl
<<endl
<<" 选择 :" ;
cin>>m;
switch(m)
{
case 1:
{
s.addstudent();
system("cls"); //清屏操作
break;
}
case 2:
{
s.changestudent();
break;
}
case 3:
{
s.clearstudent();
break;
}
case 4:
{
s.searchstudent();
break;
}
case 5:
{
s.searchmax();
break;
}
case 6:
{
n.addbook();
system("cls"); //清屏操作
break;
}
case 7:
{
n.changebook();
break;
}
case 8:
{
n.clearbook();
cout<<"删除成功!"<<endl;
break;
}
case 9:
{
n.searchbook();
break;
} } }
return 0;
}
学生成绩信息类
编写一个学生成绩信息类,包含的数据由学号、姓名、程序设计课程设计成绩、计算机网络课程成绩、数据库课程成绩。实现并测试这个类。
类中包括的成员函数(要完成操作)有:
(1)查询学生成绩函数;
(2)修改学生成绩函数;
(3)添加学生信息函数;
(4)删除学生信息函数;
提示:
(1)学生的学号从1开始自动排序,由系统自动获取(用静态成员实现);
(2)对系统进行测试,测试方法是输入5名学生的成绩信息,显示三门课程总分从高到低的排名和每门成绩都大于85分的学生名单。
#include
#include
#include
#include
#include
#include
using namespace std;
class stu
{
public:
stu (); //构造函数
void show(); //显示学生信息
char num[20];
char name[20];
char score1[10];
char score2[10];
char score3[10];
public:
stu *next;
static int Count ; //记录创建个数
int w ; //存储创建次序
};
int stu :: Count = 1 ;
stu::stu()
{
cout<<"请输入第"<<Count<<"个学生的信息:"<<endl;
cout<<"姓名 =";
cin>>name;
cout<<"学号 = ";
cin>>num;
cout<<"程序设计成绩 =";
cin>>score1;
cout<<"计算机成绩=";
cin>>score2;
cout<<"数据库成绩=" ;
cin>>score3;
w = Count;
Count++;
}
void stu::show()
{
cout<<"第"<<w<<"个学生的信息为:"<<endl;
cout<<"姓名 ="<<name<<endl;
cout<<"学号 ="<<num<<endl;
cout<<"程序设计成绩 ="<<score1<<endl;
cout<<"计算机成绩="<<score2<<endl;
cout<<"数据库成绩="<<score3<<endl;
}
stu *create() //创建输入第一个信息
{
stu *head, *tail, *New;
cout<<"按任意键开始输入:"<<endl;
getch();
New = new stu;
head = tail = New;
tail->next = 0;
system("cls");
cout<<"录入完成!!!按任意键进入系统···"<<endl;
getch();
system("cls");
return head;
}
stu *chazhao(stu *head) //查找修改模块
{
fflush(stdin);
cout<<"(1)按学号查找\n(2)姓名查找 "<<endl
<<"输入查找方式 :";
int chance;
cin>>chance;
switch (chance)
{
case 1:
{
char Num[20];
int chance;
cout<<"要查找学生的学号为:";
cin>>Num;
stu *p = head;
for (p ; p ; p = p->next)
{
if (strcmp(p->num , Num) == 0)
{
p->show();
cout<<endl;
cout<<"是否修改数据?Yes 1 No 0"<<endl;
cin>>chance;
if (chance)
{
cout<<"新学号为:";
cin>>p->num;
cout<<"修改姓名为:";
cin>>p->name;
cout<<"修改成绩为:";
cin>>p->score1;
cout<<"修改成功!"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
else
{
return head;
}
}
}
return head;
}
case 2:
{
char Name[20];
int chance;
cout<<"要查找学生的姓名为:";
cin>>Name;
stu *p = head;
for ( ; p ; p = p->next)
{
if (strcmp(p->name,Name) == 0)
{
p->show();
cout<<endl;
cout<<"是否修改数据?Yes 1 No 0"<<endl;
cin>>chance;
if (chance)
{
cout<<"新学号为:";
cin>>p->num;
cout<<"修改姓名为:";
cin>>p->name;
cout<<"修改成绩为:";
cin>>p->score1;
cout<<"修改成功!"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
else
{
return head;
}
}
}
return head;
}
}
}
stu *bianli(stu *head) //遍历信息
{
stu *p = head;
int i = 1;
for (i; i++ ; i =! p->next)
{
p->show();
cout<<endl;
}
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
stu *tianjia(stu *head) //添加信息
{
int flag;
cout<<"插入到第几个位置:";
fflush(stdin);
cin>>flag;
stu *p = head;
if (flag == 1)
{
stu *New = new stu;
New->next = head;
cout<<"添加成功!!"<<endl;
return New;
}
else
{
int i = 1;
while(i < flag - 1)
{
p = p->next;
++i;
}
stu *New = new stu;
New->next = p->next;
p->next = New;
cout<<"添加成功!!"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
for ( int i = 1 ;i == (flag - 1); p = p->next,++i)
{
stu *New = new stu;
New->next = p->next;
p->next = New;
cout<<"添加成功!!"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
}
stu *shanchu(stu *head) //删除模块
{
int chance;
system("cls");
fflush(stdin);
cout<<"删除操作:"<<endl
<<"(1)按学号查找\n(2)姓名查找 "<<endl
<<"输入查找方式 :";
cin>>chance;
switch (chance)
{
case 1:
{
char Num[20];
int chance;
cout<<"要删除学生的学号为:";
cin>>Num;
stu *p = head;
int count = 1;
for (p ; p ;p = p->next, count++)
{
if (strcmp(p->num , Num) == 0)
{
p->show();
cout<<endl;
cout<<"是否删除数据?Yes 1,No 0"<<endl;
cin>>chance;
if (chance)
{
if (p->next == 0) //删除的为最后一个节点
{
int i = 1;
p= head;
while (i < count - 1)
{
p = p->next;
i++;
}
// delete p->next;
p->next = NULL;
stu::Count--;
cout<<"删除成功!最后一个"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
else if (p == head) //删除的第一个节点
{
stu *node = p->next;
delete p;
stu::Count--;
cout<<"删除成功!第一个节点"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return node;
}
else //删除中间节点
{
stu *node = p->next;
strcpy(p->num ,node->num);
strcpy(p->name ,node->name);
strcpy(p->score1,node->score1);
p->w =node->w;
p->next = node->next;
delete node;
stu::Count--;
cout<<"删除成功!中间节点"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
}
else
{
return head;
}
}
}
return head;
}
case 2:
{
char Name[20];
cout<<"要删除学生的学生姓名为:";
cin>>Name;
stu *p = head;
int count = 1;
for (p ; p ; p = p->next, count++)
{
if (strcmp(p->name ,Name) == 0)
{
p->show();
cout<<endl;
cout<<"是否删除数据?Yes 1,No 0"<<endl;
int chance;
cin>>chance;
if (chance)
{
if (p->next == 0) //删除的为最后一个节点
{
int i = 1;
p= head;
while (i < count - 1)
{
p = p->next;
i++;
}
// delete p->next;
p->next = NULL;
stu::Count--;
cout<<"删除成功!最后一个"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
else if (p == head) //删除的第一个节点
{
stu *node = p->next;
delete p;
stu::Count--;
cout<<"删除成功!第一个节点"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return node;
}
else //删除中间节点
{
stu *node = p->next;
strcpy(p->num ,node->num);
strcpy(p->name ,node->name);
strcpy(p->score1,node->score1);
p->next = node->next;
delete node;
stu::Count--;
cout<<"删除成功!中间节点"<<endl;
cout<<"按任意键继续···"<<endl;
getch();
return head;
}
}
else
{
return head;
}
}
}
return head;
}
}
}
int main() //主函数
{
stu *Head ;
int begin;
cout<<endl
<<"#学生查询系统#"<<endl
<<"按任意键进入"<<endl;
int y = getch();
system("cls");
while(1)
{
int y = getch();
system("cls");
cout<<endl;
cout<<" ._________________. "<<endl
<<" | _______________ | "<<endl
<<" | I I | "<<endl
<<" | I 学生查询系统I | "<<endl
<<" | I_____________I | "<<endl
<<" !_________________! "<<endl
<<" (0) 添加 "<<endl
<<" (1) 查询&修改 "<<endl
<<" (2) 添加插入信息 "<<endl
<<" (3) 删除信息 "<<endl
<<" (4) 遍历学生信息 "<<endl
<<" (5) 统计学生总个数 "<<endl
<<" (6) 退出系统 "<<endl
<<endl
<<" 选择 :" ;
int x;
cin>>x;
fflush(stdin);
switch(x)
{
case 0:
Head = create();break;
case 1:
Head = chazhao(Head);
break;
case 2:
Head = tianjia(Head);
break;
case 3:
Head = shanchu(Head);
break;
case 4:
Head = bianli(Head);
break;
case 5:
cout<<"学生个数为:"<<stu::Count-1<<endl;
break;
case 6:
cout<<"bye"<<endl;
return 0;
}}
system("pause");
}
银行账户管理系统
设计一个银行账户管理程序,账户的信息有账号(唯一)、姓名、余额、身份证号码等。
类中包括的成员函数(要完成操作有):
(1)用户进行开户函数;
(2)用户进行销户函数;
(3)用户进行存款函数;
(4)用户进行取款函数;
(5)用户进行转账函数;
(6)用户进行查询函数。
提示:
(1)程序运行时,可以由用户选择任何操作;
(2)开户即为创建一个新的账号对象,要求输入用户信息后自动获取账号;
(3)销户即删除一个对象,用户销户后账号被收回,并且该账号可以继续分配给其他用户;
(4)不允许用户透支(余额不能为负);
(5)根据账号和姓名可以进行用户信息查询;
(6)可定义一个账号类存放账号信息以及执行相应的操作。
#include
#include
#include
#include
using namespace std;
class banker
{
private:
string _name;
string _id;
string _account;
int _money;
public:
void display(){
//显示/查询
cout<<"您的姓名是:"<<_name<<endl
<<"您的身份证号码是:"<<_id<<endl
<<"您的账户是:"<<_account<<endl
<<"账户余额是:"<<_money<<endl;
}
void add_banker()
{
cout<<"请输入新账户的信息:"<<endl;
cout<<"您的姓名是:";
cin>>_name;cout<<"您的身份证号码是:";
cin>>_id;
cout<<"您的账户是:";
cin>>_account;cout<<"您的余额为:";
cin>>_money;
save_new();
system("pause");
}
void delete_banker()
{
string sign,str,str1;
bool flag=true;
cout<<"输入您想注销的姓名或账户信息:";cin>>sign;
ofstream outData("temp.txt", ios::out); //磁盘文件的输出
ifstream inData("account.txt", ios::in); //输入
while(inData>>_name>>_id>>_account>>_money)
{
getline(inData,str); //接收一个字符串
if ((sign==_name)||(sign==_account))
{
cout<<"您想删除的账户是:"<<endl;
display(); //左对齐
flag=false;
break;
}
outData<<setiosflags(ios::left)<<_name<<" " <<_id<<" "<<_account<<endl;
}
if (flag)
{
cout <<endl <<"该账户不存在!" <<endl<<endl;
}
else
{
while (getline(inData,str))
{
outData<<str<<endl;
}
outData.close();
inData.close();
ofstream out("account.txt", ios::out);
ifstream in("temp.txt", ios::in);
while (getline(in, str))
{
out<<str<<endl;}
out.close(); //文件流关闭
in.close();
cout<<"账户已经成功删除!"<<endl;
}}
void search_banker()
{
string sign,str,str1;
bool flag=true;
cout<<"输入账户或姓名:";
cin>>sign;
ifstream inData("account.txt", ios::in); //输入
while(inData>>_name>>_id>>_account>>_money)
{
getline(inData,str); //接收一个字符串
if ((sign==_name)||(sign==_account))
{
cout<<"检索账户成功!"<<endl;
display();
flag=false; //左对齐
break;
}
}
if(flag)
{
cout <<endl <<"该账户不存在!" <<endl<<endl;
}
}
void deposit(int k)
{
string str;
search_banker();
int money=_money;
money+=k;
ofstream outData("temp.txt", ios::out);
ifstream inData("account.txt", ios::in);
outData<<setiosflags(ios::left)<<_name<<" " <<_id<<" "<<_account<<" "<<money<<endl;
while (getline(inData, str))
{
outData<<str<<endl;
}
outData.close();
inData.close();
ofstream out("account.txt", ios::out);
ifstream in("temp.txt", ios::in);
while (getline(in, str))
{
out <<str<<endl;
}
out.close();
in.close();
cout<<"已写入!"<<endl;
}
void draw(int k)
{
string str;
search_banker();
int money=_money;
money-=k;
if(money<0)
{
cout<<"您的账户余额不足!"<<endl;return;}
ofstream outData("temp.txt", ios::out);
ifstream inData("account.txt", ios::in);
outData<<setiosflags(ios::left)<<_name<<" " <<_id<<" "<<_account<<" "<<money<<endl;
outData.close();
inData.close();
ofstream out("account.txt", ios::out);
ifstream in("temp.txt", ios::in);
while (getline(in, str))
{
out<<str<<endl;
}
out.close();
in.close();
cout<<"存款写入成功!!!"<<endl;
}
void transfer(int k)
{
cout<<"您要转出的账户是: -";
deposit(k);
cout<<"收款方的账户是: -";
draw(k);
cout<<"转账已成功!!"<<endl;
}
void save_new();
};
int main()
{
banker b;
int k;
int temp;
while(1)
{
cout<<endl;
cout<<" ._________________. "<<endl
<<" | _______________ | "<<endl
<<" | I I | "<<endl
<<" | I 银行系统 I | "<<endl
<<" | I_____________I | "<<endl
<<" !_________________! "<<endl
<<endl
<<" (1) 开户 "<<endl
<<" (2) 注销帐户 "<<endl
<<" (3) 搜索账户 "<<endl
<<" (4) 存款 "<<endl
<<" (5) 取款 "<<endl
<<" (6) 汇款/转账 "<<endl
<<" (0) 退出 "<<endl
<<endl
<<" 选择 :" ;
cin>>k;switch(k)
{
case 1:b.add_banker();system("cls"); break;
case 2:b.delete_banker();break;
case 3:b.search_banker();break;
case 4:cout<<"输入您想要存款的数额:"<<endl;cin>>temp;b.deposit(temp);system("pause");break;
case 5:cout<<"输入您想要写入的:"<<endl;cin>>temp;b.draw(temp);break;
case 6:cout<<"输入您想要转账的数额:"<<endl;cin>>temp;b.transfer(temp);break;
case 0:return 0;
}
cout<<"------------------------------------"<<endl;
}
}
void banker::save_new() //类外定义保存联系人函数
{
ofstream outData("account.txt", ios::app);
if(!outData)
{
cout <<"失败!"<<endl;
system("pause");
return;
}
outData<<setiosflags(ios::left)<<_name<<" "<<_id<<" "<<_account<<" "<<_money<<endl;
outData.close();
cout<<"账户已设立!"<<endl;
}