第一篇:VC課程設計報告--教學事務管理系統
C++ 課 程 設 計 實 驗 報 告
學號
姓名
院系專業 能源與環境工程 熱能與動力工程
一、課題名稱
《教學事務管理系統》
二、問題陳述
使用面向對象設計的系統分析和設計,設計出適當的數據結構,編寫一個信息管理程序,程序的功能是管理學生基本信息,要求具有添加,刪除,查詢,排序的功能,并具有一定的查詢功能。
三、設計目標和設計任務
新學期開學時新學生需要注冊,登記注冊信息。注冊信息包括每個已注冊學生的班級代號、學號、姓名、注冊的學期等。
每個學期開始,學生可以選課,登記選課信息。選課信息包括已注冊的每個學生所選的課程,選課僅限該生注冊的學期。
每個學期考試完畢,需要成績登記。每個學生所選課程的考核成績,以及此成績的類型。
所輸入學生的信息如果有誤,可以修改。對于退學、轉學的學生,刪除有關資料,對轉入的學生,可以增加其各項信息。
學生信息包括:學號、班級、院系、姓名、性別、聯系電話、家庭住址等。課程信息包括:課程代號、課程名、開課學期、學分、課時。
成績信息包括:姓名、學號、班級、課程代號、成績、類別(初修、補考、重修)。可提供的查詢功能:
根據某些信息(班級、性別、專業)查詢學生名單; 某門課程的選修者名單(含學號、成績、成績類型); 某個學生某個課程某學期的成績單; 某個班級某個課程各個學生的成績單; 某個課程選修者中不及格學生的名單;
某個課程的各項信息(課程代號、學分、課時、開課學期);
四、解題算法思想
程序包括11個對話框,主對話框上四個按鈕,分別調用“注冊信息”、“選課信息”、“成績錄入”及“信息管理和查詢”四個子對話框。
其中,在“注冊信息”對話框內可以選擇學生的注冊學期,點擊“確定”按鈕后,彈出“學生信息”對話框,此對話框與后面將會提到的“信息管理與查詢”對話框的子對話框之一,“學生信息”相同,二者可相互共享。在該對話框中點擊“增加”按鈕,將調用“成員對話框”,用以實現學生的注冊。信息填寫完整后點擊“確定”,并可依次返回至主對話框。
接著,點擊“選課信息登記”,彈出選課信息對話框,在相應輸入框或下拉菜單中輸入信息后,點擊所要選的課程(可多選),然后點“確定”,程序可以自行判斷信息輸入是否合理(選課學生是否已經注冊或是否已選擇同樣的課程),如果有誤,則通過消息框提示,并可以再次輸入信息;如果信息合理,則提示選課成功。
點擊“返回”回到主對話框,可通過“學生成績錄入”按鈕調用“成績錄入”對話框,在此對話框中,可在輸入框或下拉菜單中填寫相關信息,程序同樣可以自行判斷信息輸入的合理性(輸入的學生是否已注冊或是否已選擇相應課程),如果輸入有誤,則彈出消息框提示,可以再次輸入信息;如果信息合理,則成績錄入成功,新的成績信息會在下方的List Control控件中顯示。也可以直接點擊下方List中的原有信息,程序會自動將該信息中的學生學號及相應課程代碼填寫入上方控件,方便成績的錄入。所有成績錄入完成后,點擊“完成并保存”按鈕,保存已錄入的信息,同時自動返回至主對話框。
如需要查詢相應信息,可點擊“信息管理與查詢入口”,調用“信息管理與查詢”對話框。在這個對話框中,包含三個主要功能按鈕,“學生信息”,“課程信息”和“成績信息”,分別用以提供相應的查詢功能。
點擊“學生信息”,進入“學生信息”對話框。在這里可以實現學生信息的查詢及管理功能。在上方控件中填寫或選擇相應信息后,便可以在下方的List Control控件中查看到所要的學生信息,同時選中相應條目后,可以通過右方的“刪除”、“增加”和“修改”按鈕,實現數據的管理。而通過下方“載入”和“保存”按鈕,可以載入及保存現有數據,當然也可以載入進之前保存的文件,從而實現相同學生,不同學期的信息查詢。
返回至“信息管理與查詢”對話框后,點擊“課程信息”按鈕,在彈出的“課程信息”對話框中,可以查看所有的課程的基本信息,并可以通過“增加課程”按鈕,調用“增加課程”對話框,填寫新課程信息,從而增加新的課程;在“課程信息”中的控件中選擇某門課程后,也可以通過“查看課程”按鈕調用“查看課程”對話框,查看到選修該課程的學生名單,包括學號,成績等信息,勾選上方控件后可以查看不及格學生的名單。
依次返回至“信息管理與查詢對話框”,點擊“成績信息”后,進入“成績信息”對話框。在這個對話框中可以在下方的List Control看到所有學生的成績單,通過上方的Edit控件輸入各個相應的篩選條件,便可以在下方看到所有符合條件的學生的成績單。
依次返回至主對話框,點擊“◎”退出程序。
五、數據結構描述
程序數據通過兩個節點類、兩個鏈表類來存儲。分別如下:
{ public:
CString m_CourseNum;//存儲課程代碼 CString m_CourseName;//存儲課程名 CString m_CourseTerm;//存放課程開課學期 CString m_CoursePoint;//存放課程學分 CString m_CourseTime;//存放課程課時數 int m_CourseScore;//存放學生課程成績 CString m_CourseType;//存放學生成績類型 Course *next;Course()//默認構造函數 class Course
{
} Course(CString CourseNum,CString CourseName,CString CourseTerm,CString m_CourseNum=“";m_CourseName=”“;m_CourseTerm=”“;m_CoursePoint=”“;m_CourseTime=”“;m_CourseScore=0;m_CourseType=”";next=NULL;CoursePoint,CString CourseTime);};
class CourseList { public:
Course * head;CourseList();void DeleteNode(Course *p);//用來刪除存放指定課程的鏈表 void SaveToFile(const char *name);//將課程信息保存至文件 void LoadFromFile(const char *name);//從文件中導入課程信息 void ReleaseList();//釋放鏈表
void AddNode(CString CourseNum,CString CourseName,CString CourseTerm,CString CoursePoint,CString CourseTime);//向鏈表中添加節點
};
class CStudent Course* FindNode(CString CourseNum);//根據課程代碼查找節點 { public:
CString m_StudentNo;//存放學號 CString m_Class;//存放班級 CString m_Name;//存放學生姓名 CString m_Sex;//存放學生性別 CString m_Dept;//存放專業
CString m_PhoneNo;//存放學生電話號碼 CString m_Address;//存放學生家庭住址 CString m_Term;//存放學生注冊學期 CStudent *next;Course m_Course[20];//用來存放學生選的各項課程 int s;//存放學生所選課程的數量 CStudent();CStudent(CString CourseNum,CString StudentNum,int Score,CString ScoreType);CStudent(CString StudentNo,CString Class,CString Name,CString Sex,CString Dept,CString PhoneNo,CString Address);};class CStudentList { public:
CStudent * head;//頭指針 int n;//節點數量 CStudentList();void DeleteNode(CStudent *p);//從鏈表中刪除指定節點 void SaveToFile(const char *name);//將鏈表內容存入文件 void LoadFromFile(const char *name);//從文件載入鏈表內容 void ReleaseList();//釋放鏈表 void AddNode(CString StudentNo,CString Class,CString Name,CString Sex,CString Dept,CString PhoneNo,CString Address);//向學生鏈表中添加節點 void AddScoreNode(CString CourseNum,CString StudentNum,int Score,CString ScoreType);//向鏈表中加入成績信息 void AddCourseNode(CString StudentNo,CString CourseName, CString CourseNum,CString CourseTerm CString CoursePoint, CString CourseTime);//向鏈表中加入對應課程信息
};
另外,定義了全局變量:
CStudentList m_List;//用來保存學生的各項數據
CString Term;//用來存放學生的注冊學期,用來將注冊的學期信息加入鏈表(開始時,AddNode函數中忘記加入m_Term變量了)
CString Num;//為了在查看課程信息時,對話框里的內容能夠方便的傳入子對話框中 CStudent* FindNode(CString StuNo);//根據學號查找節點
六、測試數據
以下為程序初步運行后保存至文件中的內容:
2009-***091許亞軍男 能源與環境學院 ***M9
110100首修高等數學5.0
2009-201048課時111100首修
2009-201048課時大學物理3.0 2009-201048課時112100首修C++2.0 111100首修大學物理3.0 男
2009-201048課時
2009-***091周帆能源與環境學院110M9
111100首修大學物理3.0 2009-201048課時11299首修C++2.0 2009-201048課時
2009-***091雒志強男
2009-201048課時能源與環境學院10086M9
112100首修C++2.0 2009-***091楊宗冰男
能源與環境學院119M9
112100首修C++2.0 2009-201048課時2009-***091XX女建筑學院XXXXXX
11055補考高等數學5.0 2009-201048課時1110重修大學物理3.0 2009-201048課時112100首修2009-201048課時 C++2.0
七、運行情況分析
輸入數據測試后,生成包含以上內容的文件。整個過程順利,程序可以正確運行,未出現重大錯誤,各項功能也都可以實現。可將生成的文件另外保存,從而錄入新的數據(如其他學期的學生信息),而在查詢時,可以根據需要查詢的不同學期的信息來載入不同的文件。
八、設計小結
在程序設計過程中遇到了不少問題,很多都是因為之前的想法沒有完全照顧到全局,使得后來要大幅度的修改代碼,或者用較為復雜的代碼來彌補。所以,較大的程序設計,最重要的就是一定要有大局觀,在設計初期就要將自己的目標、思路理清,最好做下記錄,而且做每一步的同時也必須想到后面的很多步,否則到后來很可能會因為之前的缺陷而做不下去,或者不得不放棄某些功能。另外,對于程序編寫本身,我發現需要注意的部分是文件的保存及載入,這部分的每一個代碼都需要仔細斟酌,否則很可能出現在編譯時沒問題,而運行時出錯的狀況。而一旦出現這種情況,就必須通過恰當的方法尋找出問題所在,如注釋某些最近寫的代碼、利用消息框彈出某些變量的值,從而判斷其與設想是否相符等方法,而不能盲目的查看所有代碼,慢慢找或者索性手足無措了。
九、心得體會
這是我第一次嘗試做比較大的程序,所以從中學到的還是很多的。首先,我發現我對程序設計還是很感興趣的,很喜歡去鉆研;其次,在設計及編程的過程中,通過發現問題、解決問題,我自己總結出來了不少方法,也發現了編寫時所必須注意和避免的錯誤,可以讓以后少走彎路。這些都是對于程序設計本身,此中的心得當然有很多,我也無法一一列舉出來,而最重要的是我從其中學到了一些程序設計之外的東西。我深切的體會到了全局思想的重要性,無論干什么,基本上都得有這種思想,每走一步都必須想到以后的路,必須想到這一步是為什么而走的,為什么目標而服務的。只有這樣,才能慢慢的穩健的走向自己的目標,不會在某一點上突然發現自己走不下去了,發現之前的某一步將自己帶上的崎嶇的路,而不得不往回走去彌補之前的過錯或者干脆拐上另一條不明方向的道路。另外,前進的過程中,當遇到問題時,必須通過恰當的方法去發現起源,然后解決,而不要盲目的去尋找或者毫無對策了,必要的時候也得求助他人。而在一步步解決問題的過程中,也必須學會自己總結,以避免以后再次遇上相同錯誤時再走彎路。
總之,這次的課程設計給了我很大幫助,如果有機會,我便會選擇向這方面去深入發展。
參考資料
1、《C++課程設計》
2、《C++程序設計》 提交日期 2010-9-16 星期四
朱金付 何鐵軍 朱萍 鄭雪清 徐冬梅 編著
朱金付 主編
第二篇:VC課程設計報告
編號:
河北工業大學計算機軟件技術基礎(VC)2007年課程設計報告
學院 班級 姓名 __ 學號 ____ 成績 __ ____
一、題目:查找滿足特定條件的三位數(27)
二、設計思路
1、總體設計 1)分析程序的功能
2)系統總體結構:設計程序的組成模塊,簡述各模塊功能。
2、各功能模塊的設計:說明各功能模塊的實現方法
3、設計中的主要困難及解決方案
在這部分論述設計中遇到的主要困難及解決方案。1)如何將輸出1~9不重復數字 2)困難2
4、你所設計的程序最終完成的功能 1)說明你編制的程序能完成的功能 2)準備的測試數據及運行結果
三、程序清單
如果是使用一個文件完成的程序,只需列出程序代碼。
如果是使用多文件完成的程序,首先說明程序中的代碼存放在哪些文件中,說明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四個文件);然后依次給出每個文件名及該文件清單,例如:
1、first.cpp文件清單
2、second.cpp文件清單
3、third.cpp文件清單
第1頁/共2 頁
編號:
4、all.h文件清單
(說明:程序清單中一定要有注釋。將程序中自己編寫的代碼列在此處,系統自動生成的代碼就不要列出了。程序清單部分的行間距設為1行即可。)
四、對該設計題目有何更完善的方案
1、對自己完成程序進行自我評價。
2、對課題提出更完善的方案
五、收獲及心得體會
1、通過本次課程設計,自己在哪些方面的能力有所提高。
2、收獲和心得體會。
日期: 2007年
月
日
(說明:本模板只提供參考,每個同學根據自己課題的特點,可減少或增加某方面的論述)
第2頁/共2 頁
第三篇:VC課程設計教學和任務
VC++ 課程設計指導書
江蘇科技大學南徐學院電子信息系
2011年9月
《計算機程序設計(vc++)課程設計》課程設計指導書
一. 課程設計教學和任務
《計算機程序設計(vc++)課程設計》是實踐性教學環節,是學生必修的一門計算機實踐課程。
本課程設計的目的是通過綜合性程序設計訓練,使學生進一步鞏固對計算機程序設計語言(vc++)基本語法,基本算法的理解,加深對面向對象程序設計的理解與應用,并使學生養成模塊化,結構化程序設計的良好風格,以及一定的程序組織能力,掌握基本程序設計的方法和技巧,為學習后續課程和實際編程打下良好的基礎。
本課程設計的重點要求學生掌握基本程序設計理念和方法,培養學生基本程序設計的應用和開發能力。二. 課程設計要求與內容
1.本課程設計要求
(1)學生必須完成本指導書中所有的小綜合設計題,并且完成大綜合設計題中的任意一題(具體題目由任課教師指定)。要求:對主要變量及函數要加注釋,以說明其功能。
(2)每個學生必須完成課程設計報告一篇。(報告格式見附錄)2.課程設計的內容
本課程設計內容包括兩個部分:小綜合設計題和大綜合設計題。
====================================== 附:課程設計報告格式一、二、課程設計目的 課程設計內容
1、小綜合題
2、大綜合題
三、課程設計體會及建議
小綜合設計題
1.二維數組的操作運算
定義一個n×n的二維數組a,將該二維數組中周邊元素的值全部置為2,其他元素全部置為0。
例如: 當n為8時生成并輸出的矩陣為:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0 定義類MAT,具體要求如下:
(1)私有數據成員
int n;二維數組的階數
int *p;將二維數組以一維數組方式存儲,p是起始指針。
(2)公有成員函數
MAT(int n1);初始化n,并動態申請數組空間,令p指向該空間。
void create();給數組賦值。
void print();按矩陣方式輸出二維數組。
~ MAT();析構函數,釋放動態數組空間。
(3)在主函數中完成對該類的測試。鍵盤輸入二維數組的階數n(如8或6),定義一個MAT類的對象m,用n初始化m,按要求生成并輸出數組的值。
2.鏈表
建立一條無序鏈表,結點名為node,用一個函數實現將這條鏈表構成一條新的逆序鏈表,即將鏈表頭當鏈表尾,鏈表尾當鏈表頭。輸出這兩條鏈表上各個節點的值。
3.字符串處理
將字符串中指定的英語單詞(字母子串)進行單數變復數的處理,單詞之間用非字母分隔。為了簡化編程,將單詞的單數變復數的規則是:直接在單詞后加s。例如單詞student的復數為students。例如,有下列字符串:
We are student, you are student, too.指定單詞student,將字符串中所有的student修改為students。處理后的字符串為:
We are students, you are students, too.試建立一個類Modistr,完成以上工作。具體要求如下:
(1)私有數據成員
char *str;存放指定的字符串;
(2)公有成員函數
Modistr(char *s);構造函數,動態申請字符串空間,用s所指向的串初
始化str;
void print();輸出字符串str;
void modify(char *wordp);將wordp所指向的單詞轉換為復數。
~Modistr();析構函數
(3)在主函數中完成對該類的測試。定義類Modistr的對象mys,用字符串“We are student, you are student, too.”初始化mys,調用函數modify(char *)完成將單詞“student”單數變復數的處理。
輸出變換前和變換后的字符串。
提示:判斷一個字符ch是否為字母,可用系統庫函數isalpha(ch)。該函數的功能是:若ch是字母,返回真,否則返回假。使用該函數必須包含頭文件ctype.h。
4.素數問題
建立一個類PRIME,求指定范圍內的所有素數(質數)。具體要求如下:
(1)私有數據成員
int data[200];依次存放指定范圍內的所有素數。
int min,max;存放待求素數的數值范圍的下限和上限。
int num;存放min與max之間的素數個數。
(2)公有成員函數
構造函數PRIME(int n1, int n2);用n1和n2初始化待求素數的范圍 min、max及num(值為0)。
void process();求指定范圍內的所有素數,把它們存放在數組data中。求素數的算法必須是:首先將min與max之間的所有奇數依次放入數組data中,然后依次判斷data中的每一個元素是否為素數。
若不是素數,則將其值賦為0。最后,數組data中不為0的元素均為素數。將不為0的元素值集中連續存放到數組的前面,同時統計素數個數。
void print();輸出求出的所有素數,同時輸出素數個數。
(3)在主程序中對該類進行測試。
定義一個PRIME類的對象test,并用待求素數范圍min =10, max=200初始化test。通過test調用成員函數求出10至200之間的所有素數,并輸出結果。[提示] 素數的定義是“只能被1和它本身整除的正整數”,素數也稱為質數。
5.信號系統問題
定義一個類為形狀,由它公有派生出正方體、球體和圓柱體。利用虛函數的多態性形式完成計算正方體、球體和圓柱體的體積。具體要求如下:(1)基類: shape 保護數據成員:double a,b;
公有構造函數:shape(double,double); 公有純虛函數:double volume();(2)派生類
正方體、球體和圓柱體的類名分別為cube,sphere,cylinder, 各派生類均需要定義公有的構造函數以及求體積的虛函數double volume()。(3)派生類為球體時,a為半徑,b為0。
派生類為正方體時,a表示邊長,b為0。
派生類為圓柱體時,a為圓柱體的邊長,b為圓柱體的高。
(4)設計一個完整的程序,分別計算正方體、球體和圓柱體的體積并輸出結果。
測試數據如下:
形狀類指針變量:p、球體對象:C(0.8)、正方體對象:S(3.2)和圓柱體類對象:R(4.1,5)。用指針p分別指向派生類對象。
輸出結果為:
球體的體積是2.14357
正方體的體積是32.768
長方體的體積是263.917 提示:球體的體積公式=4/3*π*半徑*半徑*半徑(其中π取常數3.14)
正方體的體積=棱長×棱長×棱長
圓柱的體積=底面積×高
6.求兩個日期之間相差的天數。
設計一個日期類Date,包括日期的年份、月份和日號,編寫一個友元函數,求兩個日期之間相差的天數。具體要求如下:(1)私有數據成員
int year, month, day;
(2)公有成員函數
Date(int y,int m,int d);//構造函數,初始化日期。void disp();//輸出日期。
friend int count day(Date &d,int);// 使用二維數組存放各月天數,第一行對應非閏年,第二行對應閏年。
friend int leap(int year);
//判斷是否閏年,是返回1,否則返回0。friend int subs(Date &d1,Date &d2);
//求兩個日期之間相差的天數。
(3)在主函數中完成對該類測試,定義兩個對象d1(2000,1,1)和d2(2002,10,1),調用subs函數。程序正確的運行結果是: 2000.1.1與2002.10.1之間有1002天
7.身份證。
已知舊身份證號碼共15位,其中第7~12位是以2位年份+2位月份+兩位日期組成,而新身份證號碼共18位,其中第7~14位是以4位年份+2位月份+兩位日期組成。試定義一個類ID,根據居民的出生日期檢查其身份證號是否正確。
具體要求如下: 1)私有成員:
char s[19] : 存放身份證號。
int yy, mm, dd : 分別存放居民出生日期的年(4位)、月(10~12月兩位,其余1 位)、日(兩位)。
2)公有成員:
ID(char str[]):構造函數。
int val(char *p): 將數字字符串p轉換為相應的十進制數,如“123”轉換為數值123,“08”轉換為數值8;
int fun(): 根據出生日期檢驗身份證號是否正確,如果正確,函數值為1,否則為0。
必須使用如下算法:先分別取出身份證中的表示年份、月份、日期的子字符串,然后利用上述int val(char *p)函數轉換為數值,再與出生日期的相應成員數據比較。
void print(): 輸出所有成員數據。
3)在主函數中輸入兩個身份證號(一個18位:***910,另一個15位***),分別用這兩個身份證號生成類ID的對象,在主函數中通過成員函數fun確定身份證號是否正確并輸出相應的信息(身份證號、出生日期、檢驗結果)。
8.9×9乘法口訣表。
定義一個類MUL,生成如下的9×9乘法口訣表,要求口訣表存儲在動態數組中,并輸出到屏幕上。運行結果如下: 1 2 3 4
5
6
7
8
9
具體要求如下:(1)私有數據成員
nt(*a)[9];a是一個行指針變量,其指向的數組空間是動態生成的,用于存放口訣表。口訣表存放在二維數組的左下三角形中。
(2)公有成員函數
MUL();構造函數,動態生成數組空間。void process();生成乘法口訣表。void print();輸出乘法口訣表。
~MUL();析構函數,釋放動態數組空間。
(3)在主函數中完成對該類的測試。定義一個MUL類的對象a,通過a調用成員函數求出并輸出乘法口訣表。
9.字符串分類。
輸入一個字符串,串內有數字和非數字字符。
例如:
ABC2345
345rrf678
jfkld945
將其中連續的數字作為一個整數,依次存放到另一個整型數組b中。如對于上面的輸入,將2345存放到b[0]、345放入b[1]………
統計出字符串中的整數個數,并輸出這些整數。要求:
(1)在主函數中完成輸入和輸出工作。
(2)設計一個函數,把指向字符串的指針和指向整數的指針作為函數的參數,并完成從字符串中依次提取出整數的工作。
10.數組元素排序
將含有12個元素的數組作如下處理:先將所有數據按其在數組中的次序分成4等分,然后以每一組數據為單位按其平均值從小到大排序。例如,原數組為:{5,6,7,1,2,3,7,8,9,2,3,5 }處理后的數組為:{1,2,3,2,3,5,5,6,7,7,8,9}試定義一個類DATA完成上述功能,具體要求如下:
(1)私有數據成員int a[12], b[12];數組a用以存放原始數據,數組b用以存放處理后的數據。
(2)公有成員函數DATA(int x[], int n);構造函數。用參數x初始化a,將b的所有元素初始化為0,n為數組x的元素個數。
void convert(int x[4][3]);將a中的數據進行分組,并轉換為二維數組x,其中每一組依次為數組x的一行。
void sort();按每組的平均值實現分段排序,并將排序后的數據存放到數據成員b中。
算法要求:利用函數convert()將a轉換為二維數組,再求二維數組每一行的平均值,然后根據該平均值從小到大對該二維數組進行行排序,并將結果按題意轉換為一維數組存放到b中。
void print();輸出a和b的所有元素。
(3)在主函數中利用給定的數組生成類DATA的對象test,并對該類進行測試。假設給定數組為{5, 6, 7, 1, 2, 3, 7, 8, 9, 2, 3, 5}。輸入/輸出示例:
處理前的數組:5 6 7 1 2 3 7 8 9 2 3 5
處理后的數組:1 2 3 2 3 5 5 6 7 7 8 9
大綜合設計題
設計題目一:學生學籍成績管理系統
每個學生的信息包括:姓名、學號、性別、和學生的成績信息 如:英語、數學、程序設計及體育成績等各門課的成績,要求程序能自動增加一門或是幾門課的成績,同時可以刪除課程。
從鍵盤輸入數據,然后,完成如下處理:
1.對學生姓名或學號進行查詢,顯示其信息,求出其總成績、平均成績、平均基點,并且顯不在全班的學成績排名。2.對所有學生,按班級計算平均。
設計題目二:通訊錄管理系統
1.系統概要
該系統的功能是實現通訊錄管理。2.基本功能要求
(1)輸入姓名、單位、電話號碼(2)顯示上述內容(3)按姓名查找后顯示(4)刪除有關記錄(5)增加記錄
(6)保存修改后的文件(7)顯示修改后的文件
3.各功能模塊的程序流程圖。(學生完成)4.完整的源程序代碼。(學生設計完成)
設計題目三:小型特殊計算器
1.系統概要
本程序的功能是實現一個特殊的計算器,可以實現復數、有理數、矩陣和集合的特殊計算。程序可以實現復數、有理數的加、減、乘、除,可以實現矩陣的加法、減法和乘法運算,也可以實現集合的求交集、并集、子集的運算。注:可任選兩種運算。
2.基本功能要求
(1)功能選擇可以用菜單來實現 例如:請選擇您的計算內容: 1.復數計算 2.有理數計算 3.矩陣計算 4.集合計算 0.退出
用戶通過輸入不同的數字進入不同的菜單。次級菜單主要顯示本程序的功能,主要的功能有加法、減法、乘法和除法以及集合的求交集、求并集、求子集。(2)運行時給出明確的提示信息。
比如,輸入一個什么類型的數據。根據用戶的輸入計算輸出結果。由于數據類型比較多,可以一次輸入第一個復數的實部,第一個復數的虛部,再輸入第二個復數的實部、虛部。矩陣運算需要先輸入矩陣的行數和列數,然后依次輸出矩陣的第一行第一列的元素、第一行第二列的元素等等,依次類推。有理數運算需要一次輸入有理數的分子、分母。集合運算需要輸入集合的元素個數,然后依次輸入集合中的每一個元素。
3.各功能模塊的程序流程圖。(學生完成)4.完整的源程序代碼。(學生設計完成)
設計題目四:選修課小系統
1.系統概要
通過這一款選修課小系統,學生可以登入學生端進行選課及其他的操作,管理者通過登入管理端可以進行對選修課系統的數據的管理和維護。在學生端主要設置了3個基本功能:學生選課、學生情況、選課情況等;在管理端主要設置了9個基本功能:增加/刪除學生、增加/刪除課程、更改學分、填寫成績、學生情況、選課情況、保存數據等。這些功能基本上能滿足選課的基本要求。此程序可以初步體現課程設計的目標。2.基本功能要求
用VC++編寫一個界面美觀流暢學生選課系統。學生有名字,學生最多可學五門課程,學生實際學的門數,可以給定學生的名字,可以得到學生的名字,可以得到學生給定課程的成績,可以得到學生所學課程的平均成績,可以給學生增加一門課(同時在該課程中增加一個學生)。課程最多有30個學生,課程有實際學生
數,課程有實際學生名單,課程有學分數,課程有每個學生成績,課程可以得到學分數,課程可以設置學分數,課程可以得到班平均成績,課程可以得到某個學生成績。
3.各功能模塊的程序流程圖。(學生完成)4.完整的源程序代碼。(學生設計完成)
設計題目五:學生成績管理系統
系統上采用VC++為開發環境,這個編譯器功能完善,使用方便。課程設計《學生成績管理系統》,它的主要功能是對學生的成績進行修改和管理。
系統功能要求:(1)界面
************************************ 學生成績管理系統
************************************ ************************************ ** 1--輸入數據 ** ** 2-查詢成績 ** ** 3--修改成績 ** ** 4--輸出所有學生成績 ** ** 5--統計及格和優秀人數 ** ** 6--退出系統 ** *************************************(2)功能
程序的主要功能是輸入學生姓名、成績,學號自動生成,并可以對學生的成績按學號和姓名進行查詢。該系統具有存貯學生數據,按學號、姓名查詢,按需要修改學生成績,列出學生成績和統計功能。
第四篇:VC課程設計教學和任務12131
VC++ 課程設計指導書
江蘇科技大學南徐學院電子信息系
2012年6月
《計算機程序設計(vc++)課程設計》課程設計指導書
一. 課程設計教學和任務
《計算機程序設計(vc++)課程設計》是實踐性教學環節,是學生必修的一門計算機實踐課程。
本課程設計的目的是通過綜合性程序設計訓練,使學生進一步鞏固對計算機程序設計語言(vc++)基本語法,基本算法的理解,加深對面向對象程序設計的理解與應用,并使學生養成模塊化,結構化程序設計的良好風格,以及一定的程序組織能力,掌握基本程序設計的方法和技巧,為學習后續課程和實際編程打下良好的基礎。
本課程設計的重點要求學生掌握基本程序設計理念和方法,培養學生基本程序設計的應用和開發能力。二. 課程設計要求與內容
1.本課程設計要求
(1)學生必須完成本指導書中所有的小綜合設計題,并且完成大綜合設計題中的任意一題(具體題目由任課教師指定)。要求:對主要變量及函數要加注釋,以說明其功能。
(2)每個學生必須完成課程設計報告一篇。(報告格式見附錄)2.課程設計的內容
本課程設計內容包括兩個部分:小綜合設計題和大綜合設計題。
====================================== 附:課程設計報告格式一、二、課程設計目的 課程設計內容
1、小綜合題
2、大綜合題
三、課程設計體會及建議
小綜合設計題
1.二維數組元素旋轉
以下程序將N×N階矩陣向左旋轉90°,得到一個新的N×N階矩陣。例如:原矩陣為:
向左旋轉90°后的矩陣為:2.找回文數
判斷一個字符串是否文回文,是指正向拼寫和反向拼寫都一樣的字符串。例如,“madam”是回文。假定字符串中只出現字母,且不區分字母的大小寫,即“A”和“a”被視為同一字母,其余類似。如“Madam”是回文。而“Sir”不是回文。函數plain(char*s)判斷一個字符串是回文時,若是回文,函數返回1,否則,返回0.在主函數中,當判斷一個字符串是回文時,輸出Yes,否則輸出No。
3.二維數組的操作運算
定義一個N×N的二維數組a,將該二維數組中周邊元素的值全部置為2,其他元素全部置為0。例如,當n為8時生成并輸出的矩陣為
定義類MAT,具體要求如下:(1)私有數據成員。
●int n:二維數組的行數(列數)。
●int *p:將二維數組以一維數組方式存儲,p是起始指針。(2)共有成員函數。
●MAT(int n1):初始化n,并動態申請數組空間。令p指向該空間。
●void create():給數組賦值。
●void print():按矩陣方式輸出二維數組。●~MAT():析構函數,釋放動態數組空間。
(3)在主函數中完成對該類的測試。從鍵盤輸入二維數組的行數(列數)n(如8或6)。定義一個MAT類的對象m,用n初始化m,按要求生成并輸出數組元素的值。
4.刪除序列中相同的數
定義一個字符串類STR,從左到右對字符串中每個字符刪除其后所有相同的字符,只留下第一次出現的那一個。例如,若字符串為“cocoon”,刪除重復出現的字符后,其結果是字符串“con”。
具體要求如下:(1)私有數據成員。
●char *s1:指向原字符串,存放字符串的空間需動態分配。
●char *s2:指向結果字符串,存放字符串的空間需動態分配。(2)公有成員函數
●STR(char *str:構造函數,用str初始化s1,動態分配s1和s2指向的空間。
●void delsame():刪除重復出現的字符。
●void show():輸出原字符串和結果字符串。
●~STR():析構函數,釋放動態分配的存儲空間。
在主函數中定義一個STR類的對象test,用字符串“cocoon”初始化test,通過test調用成員函數完成刪除工作,輸出刪除前后的兩個字符串。
5.求任意數降序數
對任意一個各位數字不完全相同的四位數(如4133),將各位上的數字從小到大排列得到一個升序數(1334),再將各位上的數字從小到大排列得到一個降序數(4331)。用大數(降序數)減去小數(升序數)得到一個新的四位數(2997=4331-1334)。若相減后不足四位,則高位上補零,稱此過程為一次變換。將新的四位數按上述方法再變換一次,又得到一個四位數。有斷言,經過多次變換,最后一定會得到一個固定的數6174。以下程序試圖驗證這個斷言。
6.求兩個日期之間相差的天數。
設計一個日期類Date,包括日期的年份、月份和日號,編寫一個友元函數,求兩個日期之間相差的天數。具體要求如下:(1)私有數據成員 int year, month, day;
//構造函數,初始化日期。(2)公有成員函數 Date(int y,int m,int d);void disp();//輸出日期。
friend int count_day(Date &d,int);// 使用二維數組存放各月天數,第一行對應非閏年,第二行對應閏年。
friend int leap(int year);
//判斷是否閏年,是返回1,否則返回0。
friend int subs(Date &d1,Date &d2);
//求兩個日期之間相差的天數。(3)在主函數中完成對該類測試,定義兩個對象d1(2000,1,1)和d2(2002,10,1),調用subs函數。程序正確的運行結果是: 2000.1.1與2002.10.1之間有1002天
7.實現點對象之間的各種運算。
設計一個點類Point,Point類提供了6個運算符重載函數(參加程序中的代碼和注釋),以實現相應的運算。具體要求如下:(1)私有數據成員 int x,y;
// x,y分別表示橫坐標和縱坐標。Point();//構造函數,初始化x,y的值為0。Point(int i,int j);
// //置x、y坐標。
Point(Point &);//利用完成拷貝的構造函數,給x、y賦值。~Point(){};
//析構函數,無操作。int getx();
//取x坐標。int gety();
//取y坐標。void disp();//輸出x、y的值。void offset(int,int);// 提供對點的偏移。
void offset(Point);// 重載,偏移量用Point類對象表示。bool operator==(Point);// 運算符重載,判斷兩個對象是否相同。bool operator!=(Point);// 運算符重載,判斷兩個對象是否不相同。void operator+=(Point);// 運算符重載,將兩個點對象相加。void operator-=(Point);// 運算符重載,將兩個點對象相減。
Point operator+(Point);// 運算符重 載,相加并將結果放在左操作數中。Point operator-(Point);// 運算符重載,相減并將結果放在左操作數中。(3)編寫一個程序測試該類,測試數據及要求如下:
點類:p1(2,3),p2(3,4),p3(p2)完成的運算有:
以p3為主要測試對象,首先輸出p3坐標值,置p3偏移量(10,10),p2==p3;p2!=p3;p3+=p1;p3-=p2;p3=p1+p3;p3=p1-p2;每完成一次運算,要將結果進行輸出。程序正確執行的結果如下:
1:(3,4)2:(13,14)3:0(2)公有成員函數
4:1 5:(15,17)6:(12,13)7:(14,16)8:(11,12)8.定義一個描述學生通訊錄的類,并進行測試。
定義一個描述學生通訊錄的類COMMU,數據成員包括:姓名、學校、電話號碼和郵編;成員函數包括:輸出各個數據成員的值,分別設置和獲取各個數據成員的值。
分析:由于姓名、學校和電話號碼的數據長度是可變的,可使用動態的數據結構。郵編的長度是固定的,可定義一個字符數組來存放郵編。將數據成員均定義為私有的。用一個成員函數輸出所有的成員數據,用四個成員函數分別設置姓名、單位、電話號碼和郵編,再用四個成員函數分別獲取姓名、單位、電話號碼和郵編。主函數完成簡單的測試工作。具體要求如下:(1)私有數據成員
char *pName;//
char *pSchool;
char *pNum;
char
Box[10];(2)公有成員函數
void Print(void);
//輸出數據成員
//釋放數據成員占用的void Init(char *,char *,char *,char *);
//完成初始化
void FreeSpace(void);空間
void SetName(char *name);void SetScool(char *unit);void SetNum(char *num);void SetBox(char *mailnum);char *GetName(void);char *GetScool(void);char *GetNum(void);char *GetBox(void);
//置姓名
//學校名稱 //置電話號碼 //置郵編 //取姓名 //取學校 //取電話號碼 //取郵編
//單位 //電話號碼 //郵編
(3)在主函數中完成對該類測試,定義兩個對象c1和c2,分別兩個對象的成員進行初始化、值設置并輸出測試結果。
9.打印日歷。
根據所輸入的年份打印該年的日歷。主要功能函數如下: void printmonth(int);//打印每個月的日歷
void printhead(int);
//打印日歷每個月的頭,并將打印位置移到該月第一天的星期幾處
int firstday(int);
//計算第一天是星期幾 int daysofmonth(int);//該月有多少天 int isleap(int);
//判斷是否是閏年
需定義兩個全局變量year和weekday,分別存放年份 和 每個月的第一天是星期幾
10.集合的操作
定義一個求兩個集合的交集的類DataSet。并在主函數中用兩個字符串進行測試。具體要求如下:
1)私有數據成員:
char *p1, *p2;指向存放兩個原始數據集合的指針。
char *p;指向復制出來的兩個集合的交集數據的指針。
2)公有成員函數:
DataSet(char a[ ], char b[ ]): 構造函數,提供原始數組,同時也要根據兩個數組中較大的一個初始化指針p所指向的內存。
void fun(): 功能函數,求交集。要求交集中無重復字符。
void print(): 輸出函數,輸出原始數據及結果。
~DataSet(): 析構函數,實現必要的功能。
大綜合設計題
設計題目一:學生成績管理系統
1.系統概要
該系統完成學生信息的輸入,插入,刪除一個學生信息,修改,查找學生信息,計算學生的總分,并能按學生的總分排序。
2.基本功能要求
(1)按順序輸入若干個學生信息
(2)插入一個學生信息(先輸入插入位置,再輸入學生信息)(3)刪除一個學生信息(先刪除插入位置,再刪除學生信息)(4)修改已知學號的學生信息(按學號來找)(5)查找已知學號的學生信息(按姓名來找)(6)統計一個學生的總分成績(7)按總分從高到低輸出學生成績表(8)顯示所有學生的信息(9)退出。
3.各功能模塊的程序流程圖。(學生完成)
4.完整的源程序代碼。(學生設計完成)
設計題目二:通訊錄管理系統
1.系統概要
該系統的功能是實現通訊錄管理。
2.基本功能要求
(1)輸入姓名、單位、電話號碼(2)顯示上述內容(3)按姓名查找后顯示(4)刪除有關記錄(5)增加記錄(6)保存修改后的文件
(7)顯示修改后的文件
3.各功能模塊的程序流程圖。(學生完成)
4.完整的源程序代碼。(學生設計完成)
設計題目三:小型特殊計算器
1.系統概要
本程序的功能是實現一個特殊的計算器,可以實現復數、有理數、矩陣和集合的特殊計算。程序可以實現復數、有理數的加、減、乘、除,可以實現矩陣的加法、減法和乘法運算,也可以實現集合的求交集、并集、子集的運算。注:可任選兩種運算。
2.基本功能要求
(1)功能選擇可以用菜單來實現 例如:請選擇您的計算內容:
1.復數計算 2.有理數計算 3.矩陣計算 4.集合計算 0.退出
用戶通過輸入不同的數字進入不同的菜單。次級菜單主要顯示本程序的功能,主要的功能有加法、減法、乘法和除法以及集合的求交集、求并集、求子集。(2)運行時給出明確的提示信息。
比如,輸入一個什么類型的數據。根據用戶的輸入計算輸出結果。由于數據類型比較多,可以一次輸入第一個復數的實部,第一個復數的虛部,再輸入第二個復數的實部、虛部。矩陣運算需要先輸入矩陣的行數和列數,然后依次輸出矩陣的第一行第一列的元素、第一行第二列的元素等等,依次類推。有理數運算需要一次輸入有理數的分子、分母。集合運算需要輸入集合的元素個數,然后依次輸入集合中的每一個元素。
3.各功能模塊的程序流程圖。(學生完成)
4.完整的源程序代碼。(學生設計完成)
第五篇:C語言課程設計報告-學生成績管理系統(vc)
一、實踐的目的和要求
加深對《C語言》課程所學知識的理解,進一步鞏固C語言語法規則。學會編制結構清晰、風格良好、數據結構適當的C語言程序,從而具備解決綜合性實際問題的能力。
二、實踐內容
在熟練掌握C語言的基本知識:數據類型(整形、實型、字符型、指針、數組、結構等);運算類型(算術運算、邏輯運算、自增自減運算、賦值運算等);程序結構(順序結構、判斷選擇結構、循環結構);大程序的功能分解方法(即函數的使用)等。進一步掌握各種函數的應用,包括時間函數、繪圖函數,以及文件的讀寫操作等。
三、實踐任務 1.歡迎畫面
2.學生成績管理系統(自己設計界面)3.異或加密與解密
(1)文件加密
(2)文件解密 說明:將某一已知文件的內容以字符形式讀出,與密鑰(用戶從鍵盤輸入)的對應字符進行異或操作即可,解密同樣如此。如:設原文為ab1234,密鑰為56,則有 ab1234 565656
按二進制進行異或操作即可得到密文(亂碼)。4.移位加密與解密(1)文件加密(2)文件解密
說明:將某一已知文件的內容(限于英文字母)以字符形式讀出,根據密鑰k(用戶從鍵盤輸入)將對應字符進行移位操作即可,解密時移動方向相反。
如:設原文為abcdef,密鑰為5,則有
abcdef 每個字母按字母表向后移動位(注:z后接a)fghijkl 可得到密文(亂碼)。5.輔助運算(1)整數N模m的乘法逆t
要求:輸入整數N和m,求出t,若t不存在,給出信息。提示:這三個數滿足:N*t%m=1,使用窮舉法。
例如:當N為11,m為26時,由于(11×19)%26=1,所以11模26的乘法逆為19。(2)統計字母個數
要求:輸入一段英文字母,統計各個字母的個數,并按個數從大到小排序輸出。
提示:字母大小寫等價。輸出格式為:字母:個數。(3)OTP加密
要求:輸入同等長度的原文x和密鑰k(英文字母),根據公式 c=(x+k)%26 得到密文,并輸出。
提示:將26個字母按0~25編號,將原文字母和對應位置的密鑰字母的編號按上述公式進行計算后得到一個新的字母。
四、設計流程圖
流程圖另附!
五、相關程序 1 歡迎畫面
#include
initgraph(&gd,&gm,“c: urboc2”);Copy();DrawSnow();getch();closegraph();}
void Copy(){
setcolor(0);
setfillstyle(SOLID_FILL,15);fillellipse(200,200,4,4);size=imagesize(196,196,204,204);save1=malloc(size);save2=malloc(size);
getimage(196,196,204,204,save1);getimage(96,96,104,104,save2);}
void Pr(){
int s[15]={0,100,150,200,150,200,250,150,250,300,250,150,100,250,350};setcolor(change/10);settextstyle(0,0,4);
outtextxy(150,200,“Welcome!!”);sound(s[change/10]);}void DrawSnow(){int i;int sx[62];randomize();for(i=0;i<62;i++)sx[i]=(i+2)*10;cleardevice();while(!kbhit()){ Pr();
if(snownum!=100){
snow[snownum].speed=2+random(5);i=random(62);
snow[snownum].x=sx[i];
snow[snownum].y=10-random(100);} for(i=0;i putimage(snow[i].x,snow[i].y,save2,COPY_PUT);Pr(); if(snownum!=100)snownum++;/*delay(300);*/ setfillstyle(SOLID_FILL,15);for(i=0;i snow[i].y+=snow[i].speed; putimage(snow[i].x,snow[i].y,save1,COPY_PUT);if(snow[i].y>500) snow[i].y=10-random(200);} change++;if(change==140)change=10;} nosound();} 2學生成績管理系統(自己設計界面)#define N 1 struct student {char num[10];char name[10];int score[4];float ave;}stu[N];main() {int i,j,max,maxi,sum;float average;for(i=0;i {printf(“Please input scores of student %d :n”,i+1);printf(“NO.:”); scanf(“%s”,stu[i].num);printf(“name:”); scanf(“%s”,stu[i].name);for(j=0;j<3;j++) {printf(“score %d :”,j+1);scanf(“%d”,&stu[i].score[j]);} } average=0;max=0;maxi=0;for(i=0;i for(j=0;j<3;j++)sum+=stu[i].score[j];stu[i].ave=sum/3.0;average+=stu[i].ave;if(sum>max){max=sum;maxi=i;} } average/=N; printf(“ NO.name score1 score2 score3 averagen”);for(i=0;i {printf(“%5s”,stu[i].num); printf(“%10s”,stu[i].name);for(j=0;j<3;j++) printf(“%9d”,stu[i].score[j]);printf(“%8.2fn”,stu[i].ave);} printf(“average=%6.2fn”,average); printf(“The highest score is : %s,score total :%dn”,stu[maxi].name,max);getch();} 3.異或加密與解密 #include void jiami(char *in,char *pwd,char *out);void main(int argc,char *argv[]){ char in[30];char out[30];char pwd[8];if(argc!=4){ printf(“Input file name:n”);gets(in); printf(“Please enter password:n”);gets(pwd); printf(“Output file name:n”);gets(out); jiami(in,pwd,out);} else { strcpy(in,argv[1]);strcpy(pwd,argv[2]);strcpy(out,argv[3]);jiami(in,pwd,out);} } void jiami(char *in,char *pwd,char *out_file){ FILE *fp1,*fp2;register char ch;int j=0;int k=0; fp1=fopen(in,“rb”);if(fp1==NULL){ printf(“Cannot open in-file!n”);exit(1);} fp2=fopen(out_file,“wb”);if(fp2==NULL){ printf(“Cannot open or create output-file!n”);exit(1);} while(pwd[++k]);ch=fgetc(fp1);while(!feof(fp1)){ fputc(ch^pwd[j>=k?j=0:j++],fp2);ch=fgetc(fp1);} fclose(fp1);fclose(fp2);} 4.移位加密與解密 #include“stdio.h” main(){ int choice=0,k;FILE *fp1,*fp2; char c,filename1[30],filename2[30]; printf(“Please input two deferent filename:”);scanf(“%s%s”,filename1,filename2);printf(“Please input the password :n”);scanf(“%d”,&k); if((fp1=fopen(filename1,“r”))==NULL) printf(“nERROR!CAN NOT OPEN THE FILEn”);else{ fp2=fopen(filename2,“w”); printf(“nChoose:(1-jiami 2-jiemi)”);scanf(“%d”, &choice);switch(choice){ case 1: do{ c=getc(fp1); if(((c>='a')&&(c<='z'-k))||((c>='A')&&(c<='Z'-k)))putc(c+k,fp2); else if(((c>'z'-k)&&(c<='z'))||((c>'Z'-k)&&(c<='Z')))putc(c-(26-k),fp2);else putc(c,fp2);}while(c!=EOF);break;case 2: do{ c=getc(fp1); if(((c>='a'+k)&&(c<='z'))||((c>='A'+k)&&(c<='Z')))putc(c-k,fp2); else if(((c>='a')&&(c<'a'+k))||((c>='A')&&(c<'A'+k)))putc(c+(26-k),fp2);else putc(c,fp2);}while(c!=EOF);break; default: printf(“nYou have choose a wrong number!Please choose again!”);} } fclose(fp1);fclose(fp2);} 5.輔助運算 (1)整數N模m的乘法逆t main(){ unsigned n,m,t=1;int c; printf(“Please enter the number:n”);scanf(“%d,%d”,&n,&m);while(t<65535){ c=n*t%m;if(c==1||c==0)break;t++;} if(t==65535||c==0) printf(“Nicheng number is not exited!n”);if(c==1) printf(“T is : %dn”,t);getch();} (2)統計字母個數 #include “string.h” main(){ int i,j,t; char a[80],b[26];int c[26];char e; printf(“Please enter the letters:n”);gets(a); for(i=0;i<26;i++)b[i]='A'+i;for(i=0;i<26;i++)c[i]=0; for(j=0;j<80;j++){for(i=0;i<26;i++){ if(a[j]==b[i]||a[j]==b[i]+32)c[i]++;} if(a[j]=='
主站蜘蛛池模板:
亚洲精品一区二区三区大桥未久|
精品一区二区三区在线观看视频|
亚洲人成无码www久久久|
久久人妻天天av|
四虎国产精亚洲一区久久特色|
波多野结衣av在线观看|
伊人情人综合网|
国产愉拍精品手机|
国产偷国产偷亚洲清高网站|
综合激情五月丁香久久|
久久天天躁狠狠躁夜夜av|
精品国产一区二区三区四区vr|
强行无套内谢大学生初次|
久久99精品久久久久久齐齐|
亚洲性视频免费视频网站|
男人的天堂无码动漫av|
亚洲制服丝袜无码av在线|
国产丝袜视频一区二区三区|
久久久日韩精品一区二区三区|
国产乱人伦精品一区二区|
丁香色欲久久久久久综合网|
伊人丁香狠狠色综合久久|
久草在线|
婷婷五月综合国产激情|
美女露出奶头扒开尿口免费网站|
亚洲国产成人片在线观看|
午夜国人精品av免费看|
精品无码久久久久国产手机版|
大胆欧美熟妇xxbbwwbw高潮了|
狠狠躁日日躁夜夜躁2020|
99在线精品一区二区三区|
日韩视频无码免费一区=区三区|
男女后式激烈动态图片|
国产97成人亚洲综合在线|
国产69精品久久久久777|
亚洲精品第一国产综合精品99|
国产精品多人p群无码|
免费国产污网站在线观看15|
无码人妻丰满熟妇啪啪7774|
久久久久黑人强伦姧人妻|
亚洲精品久久久久久动漫器材一区|