




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、課 程 設(shè) 計(jì) 任 務(wù)書課程名稱:面向?qū)ο蟪绦蛟O(shè)計(jì)專業(yè):計(jì)算機(jī)科學(xué)與技術(shù)班級(jí): 一班姓名: 蘇昊學(xué)號(hào): 20121308014<<面向?qū)ο蟪绦蛟O(shè)計(jì)>>課程設(shè)計(jì)一、課程設(shè)計(jì)目的與基本要求1. 課程設(shè)計(jì)目的課程的主要目標(biāo)是:(1) 應(yīng)用Visual C+6.0集成開發(fā)環(huán)境進(jìn)行應(yīng)用程序和系統(tǒng)的開發(fā)設(shè)計(jì);(2) 掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的基本方法和步驟;(3) 通過(guò)獨(dú)立完成一個(gè)綜合應(yīng)用程序的開發(fā),培養(yǎng)學(xué)生實(shí)踐動(dòng)手技能,提高學(xué)生分析問(wèn)題和解決問(wèn)題的能力。2、 系統(tǒng)的功能模塊與構(gòu)成板塊,含必要的程序流程圖1、 實(shí)驗(yàn)一:個(gè)人銀行賬戶管理程序含date.h date.cpp accmula
2、tor.h account.h account.cpp 主函數(shù).cpp等文件組成2、 實(shí)驗(yàn)二:高校學(xué)籍管理系統(tǒng)1. 系統(tǒng)功能需求(系統(tǒng)流程圖)1) 能夠從屏幕上讀取一個(gè)學(xué)生的信息并將信息存入到數(shù)據(jù)文件中。2) 能夠?qū)⒅付ǖ男畔奈募袆h除3) 能夠按編號(hào)、姓名對(duì)學(xué)生的信息進(jìn)行檢索并將檢索結(jié)果顯示在屏幕上4) 可以統(tǒng)計(jì)全部學(xué)生的總成績(jī),及其在班上的排名5) 能夠統(tǒng)計(jì)各科的平均成績(jī)以及及格率6) 要求有錯(cuò)誤提示功能,例如性別只能輸入男女,輸入錯(cuò)誤提示重新輸入7) 如果檢索不到相應(yīng)的信息應(yīng)提示用戶8)實(shí)驗(yàn)程序源代碼:實(shí)驗(yàn)1:/date.h#ifndef _DATE_H_#define _DATE_H
3、_#include<iostream>class 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
4、!=0|year%400=0;void show() const;int operator- (const Date& date) constreturn totalDays-date.totalDays;bool operator <(const Date &date) const return totalDays<date.totalDays;std:istream & operator>>(std:istream &in,Date &date);std:ostream &operator<<(std:os
5、tream &out,const Date &date);#endif/account.h#include"date.h"#include"accumulator.h"#include<string>#include<map>#include<istream>class Account;class AccountRecordprivate:Date date;const Account *account;double amount;double balance;std:string desc;publi
6、c:AccountRecord(const Date &date,const Account *account,double amount,double balance,const std:string &desc); void show() const ;typedef std:multimap <Date,AccountRecord>RecordMap;class Accountprivate:std:string id;double balance;static double total;static RecordMap recordMap;protected
7、: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
8、 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
9、 &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
10、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 cred
11、it;double rate;double fee;double getDebt() constdouble balance=getBalance();return (balance<0?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 get
12、Fee() constreturn fee; double getAvailableCredit() constif(getBalance()<0)return credit+getBalance();else return credit; 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 Da
13、te &date); void show(std:ostream &out) const;/accumulotor.h/#include"date.h"class Accumulatorprivate:Date lastDate;double value ;double sum;public:Accumulator(const Date &date,double value):lastDate(date),value(value),sum(0)double getSum(const Date &date) const return sum+v
14、alue*(date-lastDate);void change(const Date &date,double value)sum=getSum(date);lastDate=date;this->value=value;void reset(const Date &date,double value)lastDate=date;this->value=value;sum=0;/date.cpp#include"date.h"#include<iostream>#include<cstdlib>using namespa
15、ce 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(day<=0|day>getMaxDay()cout<<"invalid date:"show();cout<<endl;exit(1);int years=year-1;totalDays=years*365+y
16、ears/4-years/100+years/400+DAYS_BEFORE_MONTHmonth-1+day;if(isLeapYear()&&month>2)totalDays+;int Date:getMaxDay() constif(isLeapYear()&&month=2)return 29;else return DAYS_BEFORE_MONTHmonth-DAYS_BEFORE_MONTHmonth-1;void Date:show() constcout<<getYear()<<"-"<
17、<getMonth()<<"-"<<getDay();istream & operator >>(istream &in ,Date &date)int year,month,day;char c1,c2;in>>year>>c1>>month>>c2>>day;date=Date(year,month,day);return in;ostream &operator <<(ostream &out,const Date
18、&date)out<<date.getYear()<<"-"<<date.getMonth()<<"-"<<date.getDay();return out;/account.cpp#include"account.h"#include<cmath>#include<iostream>#include<utility>using namespace std;using namespace std:rel_ops;AccountRec
19、ord :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() constcout<<"t#"<<account->getId()<<"t"<&
20、lt;amount<<"t"<<balance<<"t"<<desc<<endl;double Account:total=0;RecordMap Account:recordMap;void Account:query(const Date &begin,const Date &end)if(begin<=end)RecordMap:iterator iter1=recordMap.lower_bound(begin); RecordMap:iterator iter2=
21、recordMap.upper_bound(end);for(RecordMap:iterator iter=iter=iter1;iter!=iter2;+iter)iter->second.show();Account:Account (const Date &date,const string &id):id(id),balance(0)cout<<"t#"<<id<<"created"<<endl;void Account:record(const Date &date
22、,double amount,const string &desc)amount=floor(amount*100+0.5)/100;balance+=amount;total+=amount;date.show();cout<<"t#"<<id<<"t"<<amount<<"t"<<balance<<"t"<<desc<<endl;void Account:show(ostream &out
23、) const cout<<id<<"tBalance:"<<balance;/void Account:error (const string &msg) constcout<<"Error(#"<<id<<"):"<<msg<<endl;SavingsAccount:SavingsAccount (const Date &date,const std:string &id ,double rate) :Accou
24、nt(date,id),rate(rate),acc(date,0)void SavingsAccount:deposit (const Date &date,double amount,const std:string &desc)record(date,amount,desc);acc.change(date,getBalance();void SavingsAccount:withdraw (const Date &date,double amount,const std:string &desc)if(amount>getBalance()erro
25、r("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.res
26、et (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,de
27、sc);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
28、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);cout<<"tAvailable credit :"<<get
29、AvailableCredit();/主函數(shù).cpp/#include"account.h"#include<iostream>#include<fstream>#include<sstream>#include<vector>#include<algorithm>using namespace std;struct deletertemplate<class T>void operator()(T*p)delete p;class Controllerprivate:Date date;vector
30、<Account*>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(
31、);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);str>>cmd;int i;/ostream out;vector<Account*>:iterator iter=accounts.begin();switch
32、(cmd)case'a':str>>type>>id;if(type='s')str>>rate;account=new SavingsAccount(date,id,rate);elsestr>>credit>>rate>>fee;account=new CreditAccount(date,id,credit,rate,fee);accounts.push_back(account);return true;case 'd':str>>index>>
33、;amount;getline(cin,desc);accountsindex->deposit(date,amount,desc);return true;case 'w':str>>index>>amount;getline(cin,desc);accountsindex->withdraw(date,amount,desc);return true;case 's':for( i=0;i<accounts.size();i+)cout<<""<<i<<&quo
34、t;"/accountsi->show();cout<<endl;return false;case 'c':str>>day;if(day<date.getDay ()cout<<"You cannot specify a previous day"else if(day>date.getMaxDay ()cout<<"Invalid day"elsedate=Date(date.getYear (),date.getMonth(),day);return tr
35、ue;case 'n':if(date.getMonth ()=12)date=Date(date.getYear()+1,1,1);elsedate=Date(date.getYear (),date.getMonth ()+1,1);for( iter=accounts.begin();iter!=accounts.end();+iter)(*iter)->settle(date);return true;case'q':str>>date1>>date2;Account:query(date1,date2);return fa
36、lse;case'e':end=true;return false;cout<<"Invalid command :"<<cmdLine<<endl;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(fileI
37、n,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)exit"<<endl;while(!controller.isEnd()cout<<controller.getDate()<<"tTotal:&qu
38、ot;<<Account:getTotal ()<<"tcommand>"string cmdLine;getline(cin,cmdLine);if(controller.runCommand(cmdLine)fileout<<cmdLine<<endl;return 0;實(shí)驗(yàn)二代碼:# include <stdio.h># include <stdlib.h># include <string.h># include <conio.h># define N 20/*自定
39、義函數(shù)聲明部分*/void showheader(); /聲明顯示表頭部分int menu(); /聲明主菜單函數(shù)int menu3(); /聲明插入功能子菜單函數(shù)int menu4(); /聲明刪除功能子菜單函數(shù)int menu5(); /聲明查找功能子菜單函數(shù)int quanxian(); /聲明用戶權(quán)限管理函數(shù)void SavePass();struct student shuru(); /聲明學(xué)生信息錄入函數(shù)void display(struct student); /聲明顯示函數(shù)void sort(struct student stuN,int); /聲明排序函數(shù)void charu
40、(struct student stuN,int); /聲明插入函數(shù)int del1(struct student stuN,int); /聲明按照學(xué)號(hào)刪除函數(shù)int del2(struct student stuN,int); /聲明按照姓名刪除函數(shù)void chazhao1(struct student stuN,int i); /聲明按照學(xué)號(hào)查找函數(shù)void chazhao2(struct student stuN,int i); /聲明按照姓名查找函數(shù)/*定義結(jié)構(gòu)體*/struct student int ID; char name15; char sex; float score3;
41、 char *getSex() /構(gòu)造結(jié)構(gòu)成員 if(sex='g') return "女" else return "男" float Ave() /構(gòu)造結(jié)構(gòu)成員 return (score0+score1+score2)/3; student() /構(gòu)造函數(shù) score0=0; score1=0; score2=0; ;/*主函數(shù)開始*/void main() struct student stuN; int count=0,m=0,j; char ch,ch1; int choice,choice3,choice4,choice5;
42、 /菜單選項(xiàng)及子菜單選項(xiàng) int user; do /此循環(huán)體控制用戶信息輸入錯(cuò)誤后是否重輸 user=quanxian(); /調(diào)用擁護(hù)權(quán)限函數(shù) system("cls"); if(user=1) /此條件結(jié)構(gòu)判斷用戶權(quán)限輸入是否正確 do /此循環(huán)體控制返回主菜單 ch1='n' /如果用戶將主菜單選擇錯(cuò)誤,可用此變量控制是否重輸 choice=menu(); system("cls"); switch(choice) /此條件結(jié)構(gòu)控制選擇菜單功能后的操作 case 1: /輸入學(xué)生信息 do /此循環(huán)體控制是否繼續(xù)輸入 printf
43、("* 學(xué)員信息錄入 *n"); printf("nn請(qǐng)輸入第%d個(gè)學(xué)員的成績(jī):nn",count+1); stucount=shuru(); /調(diào)用輸入函數(shù) printf("nn是否繼續(xù)(y/n)"); fflush(stdin); ch=getchar(); count+; system("cls"); while(ch='y'); /system("pause"); break; case 2: /顯示排序好的學(xué)生信息 printf("* 學(xué)員信息顯示 *n&qu
44、ot;); printf("nn排序后的成績(jī)?nèi)缦?n"); sort(stu,count); /調(diào)用排序函數(shù) showheader(); for(j=0;j<count;j+) display(stuj); /調(diào)用顯示函數(shù) system("pause"); system("cls"); break; case 3:/插入功能 while(choice3!=3) /此循環(huán)體控制是否退出子菜單 system("cls"); choice3=menu3(); /調(diào)用子菜單函數(shù) system("cls&qu
45、ot;); if(choice3=1) /此條件結(jié)構(gòu)控制子菜單選項(xiàng) do /此循環(huán)體判斷是否繼續(xù)插入 printf("* 學(xué)員信息插入 *n"); charu(stu,count); /調(diào)用插入函數(shù) count+; printf("是否繼續(xù)插入?(y/n)"); fflush(stdin); ch=getchar(); system("cls"); while(ch='y'); if (choice3=2) /此條件結(jié)構(gòu)控制子菜單選項(xiàng) printf("nn插入學(xué)生信息后如下:n"); showhea
46、der(); for(j=0;j<count;j+) display(stuj); /調(diào)用顯示函數(shù) system("pause"); / break; case 4:/刪除功能 while(choice4!=4) /此循環(huán)體控制是否退出子菜單 int num; system("cls"); choice4=menu4(); /調(diào)用子菜單函數(shù) system("cls"); if(choice4=1) /此條件結(jié)構(gòu)控制子菜單按照學(xué)號(hào)刪除選項(xiàng) do /此循環(huán)體控制是否繼續(xù)刪除 printf("* 按照學(xué)號(hào)刪除學(xué)員信息 *n&
47、quot;); num=del1(stu,count);/調(diào)用刪除函數(shù) /system("cls"); if(num=1) count-; printf("n是否繼續(xù)刪除?(y/n)"); fflush(stdin); ch=getchar(); system("cls"); while(ch='y'); if(choice4=2) /此條件結(jié)構(gòu)控制子菜單按照姓名刪除選項(xiàng) do /此循環(huán)體控制是否繼續(xù)刪除 printf("* 按照姓名刪除學(xué)員信息 *n"); num=del2(stu,count);
48、/調(diào)用刪除函數(shù) if(num=1) count-; printf("n是否繼續(xù)刪除?(y/n)"); fflush(stdin); ch=getchar(); system("cls"); while(ch='y'); if(choice4=3) /此條件結(jié)構(gòu)控制子菜單顯示刪除后的信息選項(xiàng) printf("nn刪除學(xué)生信息后如下:n"); showheader(); for(j=0;j<count;j+) display(stuj); /調(diào)用顯示函數(shù) system("pause"); brea
49、k; case 5:/查找功能 while(choice5!=3) /控制是否繼續(xù)查找 system("cls"); choice5=menu5(); /調(diào)用查找子菜單函數(shù) system("cls"); if(choice5=1) /控制按照學(xué)號(hào)查找 chazhao1(stu,count);/調(diào)用按照學(xué)號(hào)查找的函數(shù) system("cls"); if(choice5=2) /控制按照姓名查找 chazhao2(stu,count);/調(diào)用按照姓名查找的函數(shù) system("cls"); system("p
50、ause"); break; case 6:/退出 printf("確認(rèn)退出?(y/n)"); /讓用戶確認(rèn)是否退出 fflush(stdin); ch=getchar(); break; default: printf("aa警告:您輸入錯(cuò)誤,是否重輸!(y/n)"); fflush(stdin); ch1=getchar(); system("cls"); break; while(ch='n'| ch1='y');/控制是否要退出系統(tǒng) if(user=0) printf("aa
51、警告:您的用戶名或密碼輸入有誤!是否重輸?(y/n)"); fflush(stdin); ch=getchar(); system("cls"); while(ch='y');/*主函數(shù)結(jié)束*/*自定義輸入函數(shù)*/struct student shuru() struct student stu; printf("nn學(xué)號(hào):"); scanf("%d",&stu.ID); printf("n姓名:"); scanf("%s",); printf("n性別(g/b):"); fflush(stdin); scanf("%c",&stu.sex); printf("n語(yǔ)文成績(jī):"); scanf("%f",&stu.score0); printf("n數(shù)學(xué)成績(jī):"); scanf("%f",&stu.score1); printf("n英語(yǔ)成績(jī):"); scanf(&quo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國(guó)薄膜開關(guān)行業(yè)市場(chǎng)規(guī)模調(diào)研及投資前景研究分析報(bào)告
- 汽車車身防腐涂料涂裝技術(shù)合作合同
- 影視燈光控制系統(tǒng)租賃與燈光操作培訓(xùn)合同
- 智能手環(huán)定制開發(fā)與品牌授權(quán)合作協(xié)議
- 集團(tuán)化企業(yè)食堂綜合服務(wù)外包合同
- 新能源汽車充電設(shè)施區(qū)域經(jīng)銷商網(wǎng)絡(luò)合作協(xié)議
- 直播行業(yè)內(nèi)容審查補(bǔ)充協(xié)議范本下載
- 花園圍欄日常清潔與維護(hù)責(zé)任協(xié)議
- 工程結(jié)算書協(xié)議書
- 快遞代收費(fèi)協(xié)議書
- 網(wǎng)絡(luò)協(xié)議2025年考試試題及答案
- 數(shù)據(jù)投資、數(shù)據(jù)共享與數(shù)據(jù)產(chǎn)權(quán)的法律問(wèn)題探討
- 2025年城市管理執(zhí)法考試試卷及答案
- 2025年網(wǎng)絡(luò)輿情監(jiān)測(cè)與危機(jī)應(yīng)對(duì)考試題及答案
- 2025年數(shù)據(jù)工程師考試試題及答案分享
- 網(wǎng)絡(luò)與信息安全管理員考試題+參考答案解析
- 2025年中考語(yǔ)文??甲魑难侯}《10個(gè)主題+15篇范文》
- 2025年《中央一號(hào)文件》參考試題庫(kù)資料100題及答案(含單選、多選、判斷題)
- 門診手術(shù)麻醉原則課件
- 自動(dòng)噴水滅火系統(tǒng)質(zhì)量驗(yàn)收項(xiàng)目缺陷判定記錄
- 提高腸鏡患者腸道準(zhǔn)備合格率課件
評(píng)論
0/150
提交評(píng)論