面向对象程序设计课程设计.doc_第1页
面向对象程序设计课程设计.doc_第2页
面向对象程序设计课程设计.doc_第3页
面向对象程序设计课程设计.doc_第4页
面向对象程序设计课程设计.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 任 务 书课程名称:面向对象程序设计专业:计算机科学与技术班级: 一班姓名: 苏昊学号: 20121308014课程设计一、课程设计目的与基本要求1. 课程设计目的课程的主要目标是:(1) 应用Visual C+6.0集成开发环境进行应用程序和系统的开发设计;(2) 掌握面向对象程序设计的基本方法和步骤;(3) 通过独立完成一个综合应用程序的开发,培养学生实践动手技能,提高学生分析问题和解决问题的能力。2、 系统的功能模块与构成板块,含必要的程序流程图1、 实验一:个人银行账户管理程序含date.h date.cpp accmulator.h account.h account.cpp 主函数.cpp等文件组成2、 实验二:高校学籍管理系统1. 系统功能需求(系统流程图)1) 能够从屏幕上读取一个学生的信息并将信息存入到数据文件中。2) 能够将指定的信息从文件中删除3) 能够按编号、姓名对学生的信息进行检索并将检索结果显示在屏幕上4) 可以统计全部学生的总成绩,及其在班上的排名5) 能够统计各科的平均成绩以及及格率6) 要求有错误提示功能,例如性别只能输入男女,输入错误提示重新输入7) 如果检索不到相应的信息应提示用户8)实验程序源代码:实验1:/date.h#ifndef _DATE_H_#define _DATE_H_#includeclass Dateprivate:int year;int month;int day;int totalDays;public:Date(int year,int month,int day);int getYear() const return year;int getMonth() const return month;int getDay() const return day;int getMaxDay () const;bool isLeapYear() const return year%4=0&year%100!=0|year%400=0;void show() const;int operator- (const Date& date) constreturn totalDays-date.totalDays;bool operator (const Date &date) const return totalDays(std:istream &in,Date &date);std:ostream &operator(std:ostream &out,const Date &date);#endif/account.h#includedate.h#includeaccumulator.h#include#include#includeclass Account;class AccountRecordprivate:Date date;const Account *account;double amount;double balance;std:string desc;public:AccountRecord(const Date &date,const Account *account,double amount,double balance,const std:string &desc); void show() const ;typedef std:multimap RecordMap;class Accountprivate:std:string id;double balance;static double total;static RecordMap recordMap;protected:Account(const Date &date,const std:string &id);void record (const Date &date,double amount,const std:string &desc);void error (const std:string &msg)const;public:const std:string &getId() const return id;double getBalance()const return balance ;static double getTotal()return total;virtual void deposit(const Date &date,double amount,const std:string &desc)=0;virtual void withdraw(const Date &date,double amount,const std:string &desc)=0;virtual void settle (const Date &date)=0;virtual void show(std:ostream &out) const;static void query (const Date &begin,const Date &end);inline std:ostream & operator (std:ostream &out,const Account &account)account.show(out);return out;class SavingsAccount:public Account private:Accumulator acc;double rate;public:SavingsAccount(const Date &date,const std:string &id,double rate);double getRate() const return rate;void deposit(const Date &date,double amount,const std:string &desc);void withdraw(const Date &date,double amount,const std:string &desc);void settle (const Date &date);class CreditAccount :public Account private:Accumulator acc;double credit;double rate;double fee;double getDebt() constdouble balance=getBalance();return (balance0?balance:0);public :CreditAccount(const Date &date,const std:string &id,double credit,double rate,double fee);double getCredit () constreturn credit; double getRate() const return rate; double getFee() constreturn fee; double getAvailableCredit() constif(getBalance()value=value;void reset(const Date &date,double value)lastDate=date;this-value=value;sum=0;/date.cpp#includedate.h#include#includeusing namespace std;namespace const int DAYS_BEFORE_MONTH=0,31,59,90,120,151,181,212,243,273,304,334,365;Date:Date(int year,int month,int day):year(year),month(month),day(day)if(daygetMaxDay()coutinvalid date:;show();cout2)totalDays+;int Date:getMaxDay() constif(isLeapYear()&month=2)return 29;else return DAYS_BEFORE_MONTHmonth-DAYS_BEFORE_MONTHmonth-1;void Date:show() constcoutgetYear()-getMonth()-(istream &in ,Date &date)int year,month,day;char c1,c2;inyearc1monthc2day;date=Date(year,month,day);return in;ostream &operator (ostream &out,const Date &date)outdate.getYear()-date.getMonth()-date.getDay();return out;/account.cpp#includeaccount.h#include#include#includeusing namespace std;using namespace std:rel_ops;AccountRecord :AccountRecord(const Date &date,const Account*account,double amount ,double balance,const std:string &desc):date(date),account(account),amount(amount),balance(balance),desc(desc)void AccountRecord:show() constcoutt#getId()tamounttbalancetdescendl;double Account:total=0;RecordMap Account:recordMap;void Account:query(const Date &begin,const Date &end)if(beginsecond.show();Account:Account (const Date &date,const string &id):id(id),balance(0)coutt#idcreatedendl;void Account:record(const Date &date,double amount,const string &desc)amount=floor(amount*100+0.5)/100;balance+=amount;total+=amount;date.show();coutt#idtamounttbalancetdescendl;void Account:show(ostream &out) const coutidtBalance:balance;/void Account:error (const string &msg) constcoutError(#id):msggetBalance()error(not enough money);else record(date,-amount,desc);acc.change(date,getBalance();void SavingsAccount:settle (const Date &date)if(date.getMonth ()=1)double interest=acc.getSum (date)*rate/(date-Date(date.getYear()-1,1,1);if(interest!=0)record(date,interest,interest);acc.reset (date,getBalance();CreditAccount:CreditAccount(const Date &date,const string &id,double credit,double rate,double fee):Account(date,id),credit(credit),rate(rate),fee(fee),acc(date,0)void CreditAccount:deposit (const Date &date,double amount,const string &desc)record(date,amount,desc);acc.change (date,getDebt();void CreditAccount:withdraw (const Date &date,double amount,const string &desc)if(amount-getBalance()credit)error(not enough credit);elserecord(date,-amount,desc);acc.change (date,getDebt();void CreditAccount:settle (const Date &date)double interest=acc.getSum (date)*rate;if(interest!=0) record (date,interest,interest);if(date.getMonth()=1)record(date,-fee,annual fee);acc.reset (date,getDebt();void CreditAccount:show(ostream &out) const Account:show(out);couttAvailable credit :getAvailableCredit();/主函数.cpp/#includeaccount.h#include#include#include#include#includeusing namespace std;struct deletertemplatevoid operator()(T*p)delete p;class Controllerprivate:Date date;vector accounts;bool end;public:Controller(const Date &date):date(date),end(false)Controller();const Date &getDate() const return date;bool isEnd() const return end;bool runCommand (const string &cmdLine);Controller:Controller ()for_each(accounts.begin (),accounts.end(),deleter();bool Controller:runCommand (const string &cmdLine)istringstream str(cmdLine);char cmd,type;int index,day;double amount,credit,rate,fee;string id ,desc;Account *account;Date date1(1,1,1),date2(1,2,1);strcmd;int i;/ostream out;vector:iterator iter=accounts.begin();switch (cmd)casea:strtypeid;if(type=s)strrate;account=new SavingsAccount(date,id,rate);elsestrcreditratefee;account=new CreditAccount(date,id,credit,rate,fee);accounts.push_back(account);return true;case d:strindexamount;getline(cin,desc);accountsindex-deposit(date,amount,desc);return true;case w:strindexamount;getline(cin,desc);accountsindex-withdraw(date,amount,desc);return true;case s:for( i=0;iaccounts.size();i+)coutishow();coutday;if(daydate.getDay ()coutdate.getMaxDay ()coutsettle(date);return true;caseq:strdate1date2;Account:query(date1,date2);return false;casee:end=true;return false;coutInvalid command :cmdLineendl;return false;int main()Date date(2008,11,1);Controller controller(date);string cmdLine;const char *FILE_NAME=commands.txt;ifstream fileIn(FILE_NAME);if(fileIn)while(getline(fileIn,cmdLine)controller.runCommand(cmdLine);fileIn.close();ofstream fileout (FILE_NAME,ios_base:app);cout(a)add account(d)deposit(w)withdraw(s)show(c)change day (n) next mont(q)query(e)exitendl;while(!controller.isEnd()coutcontroller.getDate()tTotal:Account:getTotal ();string cmdLine;getline(cin,cmdLine);if(controller.runCommand(cmdLine)fileoutcmdLineendl;return 0;实验二代码:# include # include # include # include # define N 20/*自定义函数声明部分*/void showheader(); /声明显示表头部分int menu(); /声明主菜单函数int menu3(); /声明插入功能子菜单函数int menu4(); /声明删除功能子菜单函数int menu5(); /声明查找功能子菜单函数int quanxian(); /声明用户权限管理函数void SavePass();struct student shuru(); /声明学生信息录入函数void display(struct student); /声明显示函数void sort(struct student stuN,int); /声明排序函数void charu(struct student stuN,int); /声明插入函数int del1(struct student stuN,int); /声明按照学号删除函数int del2(struct student stuN,int); /声明按照姓名删除函数void chazhao1(struct student stuN,int i); /声明按照学号查找函数void chazhao2(struct student stuN,int i); /声明按照姓名查找函数/*定义结构体*/struct student int ID; char name15; char sex; float score3; char *getSex() /构造结构成员 if(sex=g) return 女; else return 男; float Ave() /构造结构成员 return (score0+score1+score2)/3; student() /构造函数 score0=0; score1=0; score2=0; ;/*主函数开始*/void main() struct student stuN; int count=0,m=0,j; char ch,ch1; int choice,choice3,choice4,choice5; /菜单选项及子菜单选项 int user; do /此循环体控制用户信息输入错误后是否重输 user=quanxian(); /调用拥护权限函数 system(cls); if(user=1) /此条件结构判断用户权限输入是否正确 do /此循环体控制返回主菜单 ch1=n; /如果用户将主菜单选择错误,可用此变量控制是否重输 choice=menu(); system(cls); switch(choice) /此条件结构控制选择菜单功能后的操作 case 1: /输入学生信息 do /此循环体控制是否继续输入 printf(* 学员信息录入 *n); printf(nn请输入第%d个学员的成绩:nn,count+1); stucount=shuru(); /调用输入函数 printf(nn是否继续(y/n); fflush(stdin); ch=getchar(); count+; system(cls); while(ch=y); /system(pause); break; case 2: /显示排序好的学生信息 printf(* 学员信息显示 *n); printf(nn排序后的成绩如下:n); sort(stu,count); /调用排序函数 showheader(); for(j=0;jcount;j+) display(stuj); /调用显示函数 system(pause); system(cls); break; case 3:/插入功能 while(choice3!=3) /此循环体控制是否退出子菜单 system(cls); choice3=menu3(); /调用子菜单函数 system(cls); if(choice3=1) /此条件结构控制子菜单选项 do /此循环体判断是否继续插入 printf(* 学员信息插入 *n); charu(stu,count); /调用插入函数 count+; printf(是否继续插入?(y/n); fflush(stdin); ch=getchar(); system(cls); while(ch=y); if (choice3=2) /此条件结构控制子菜单选项 printf(nn插入学生信息后如下:n); showheader(); for(j=0;jcount;j+) display(stuj); /调用显示函数 system(pause); / break; case 4:/删除功能 while(choice4!=4) /此循环体控制是否退出子菜单 int num; system(cls); choice4=menu4(); /调用子菜单函数 system(cls); if(choice4=1) /此条件结构控制子菜单按照学号删除选项 do /此循环体控制是否继续删除 printf(* 按照学号删除学员信息 *n); num=del1(stu,count);/调用删除函数 /system(cls); if(num=1) count-; printf(n是否继续删除?(y/n); fflush(stdin); ch=getchar(); system(cls); while(ch=y); if(choice4=2) /此条件结构控制子菜单按照姓名删除选项 do /此循环体控制是否继续删除 printf(* 按照姓名删除学员信息 *n); num=del2(stu,count);/调用删除函数 if(num=1) count-; printf(n是否继续删除?(y/n); fflush(stdin); ch=getchar(); system(cls); while(ch=y); if(choice4=3) /此条件结构控制子菜单显示删除后的信息选项 printf(nn删除学生信息后如下:n); showheader(); for(j=0;jcount;j+) display(stuj); /调用显示函数 system(pause); break; case 5:/查找功能 while(choice5!=3) /控制是否继续查找 system(cls); choice5=menu5(); /调用查找子菜单函数 system(cls); if(choice5=1) /控制按照学号查找 chazhao1(stu,count);/调用按照学号查找的函数 system(cls); if(choice5=2) /控制按照姓名查找 chazhao2(stu,count);/调用按照姓名查找的函数 system(cls); system(pause); break; case 6:/退出 printf(确认退出?(y/n); /让用户确认是否退出 fflush(stdin); ch=getchar(); break; default: printf(aa警告:您输入错误,是否重输!(y/n); fflush(stdin); ch1=getchar(); system(cls); break; while(ch=n| ch1=y);/控制是否要退出系统 if(user=0) printf(aa警告:您的用户名或密码输入有误!是否重输?(y/n)); fflush(stdin); ch=getchar(); system(cls); while(ch=y);/*主函数结束*/*自定义输入函数*/struct student shuru() struct student stu; printf(nn学号:); scanf(%d,&stu.ID); printf(n姓名:); scanf(%s,); printf(n性别(g/b):); fflush(stdin); scanf(%c,&stu.sex); printf(n语文成绩:); scanf(%f,&stu.score0); printf(n数学成绩:); scanf(%f,&stu.score1); printf(n英语成绩:); scanf(%f,&stu.score2); return stu; /*自定义显示函数*/void display(struct student stu) int j;printf(t%dt,stu.ID); printf(%st,stu.na

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论