《《程序设计语言(C++)》课程设计.doc》由会员分享,可在线阅读,更多相关《《程序设计语言(C++)》课程设计.doc(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录一、设计目的.3二、环境配置要求:.3三、设计题目.3题目 1 学生学籍管理系统.3题目 2 学生选修课系统.6四、课程设计文字资料要求.9五、总结报告.9六、考核.9七、实间安排.10附录:参考代码.11学生学籍管理系统.11选修课系统.26程序设计语言(C+) 课程设计一、设计目的一、设计目的1、进一步掌握利用 C+进行类的定义和操作方法; 2、进一步掌握类的继承和派生方法; 3、进一步理解虚函数和多态; 4、综合利用上述知识,学习设计并编写面向对象的 C+简单应用程序; 5、培养学生团结协作的能力。二、环境配置要求:二、环境配置要求:硬件配置硬件配置:586 以上 PC 兼容机或品牌
2、机,配有彩色显示器、鼠标、键盘,内存不小于64MB,硬盘自由空间不少于 200MB。推荐配置推荐配置为内存 128MB 或 256MB(或以上) ,硬盘自由空间 500MB 以上。操作系统操作系统:Windows2000/NT/Xp、Visual C+集成开发环境。三、设计题目三、设计题目题目 1 学生学籍管理系统(一)(一) 、系统的主要功能、系统的主要功能 1. 添加系统将提示用户输入新添加的职员的信息,插入在链表中。2. 删除首先由用户输入要删除的学生的学号,然后调用删除函数,删除该名学生的资料。3. 查找首先由用户输入要查找的学生的学号,然后系统用查找函数查找,然后系统就调用输出函数,
3、输出所查找的学生资料。4. 修改首先由用户输入要修改的学生的学号,然后系统用修改函数查找,显示该名学生的资料,然后系统提示用户输入需要修改的项目和新的资料。5. 其他功能在上述功能的基础上进行进一步完善。(二)(二) 、系统总框架图、系统总框架图主要提示的 菜单界面开 始 界 面查找 资 料修改 资 料删除 资 料输出 资料插入 资 料(三)(三) 、系统数据结构定义、系统数据结构定义 class listNode/这是数据节点! public: listNode() listNode(Inform listNode(listNode listNode *create();/创建链表 list
4、Node *insert(listNode *);/对链表进行插入操作; listNode *del(listNode *,char *);/删除资料中含有 char*的节点; void printlistNode(listNode *);/打印链表; listNode(); void search(char *,listNode *);/查找链表中含有 char*的学生; listNode *modify(listNode *);/修改 private: Inform data; static int num; listNode *nextPtr; ;*Inform.h*class Info
5、rm friend ostream public: Inform(); Inform(Inform int operator=(const Inform int operator=(char *); int operator!=(char *); Inform Inform();private: char *number; char *id; char *name; char *sex; achieve ach; char *phonenumber; char *roomnumber;*achieve.h*cclass achieve friend ostream public: achiev
6、e(); void countaverage(subject *); int operator=(achieve achieve void instruction(); achieve(); void setnum(int a);int getnum(); subject *TT; private: int num; float sum; float average;*subject.h*class subject friendistream friend ostream listNode(listNode listNode *create(); listNode *insert(listNo
7、de *);/对链表进行插入操作; listNode *del(listNode *,char *);/删除资料中含有 char*的节点; void printlistNode(listNode *);/打印链表; listNode(); void search(char *,listNode *);/查找链表中含有 char*的学生; listNode *modify(listNode *); private: Inform data; static int num; listNode *nextPtr; ; #endif*listNode.cpp*#include“listNode.h“i
8、nt listNode:num=0; listNode:listNode(Inform nextPtr=new listNodeLEN; listNode:listNode(listNode nextPtr=new listNodeLEN; assert(nextPtr!=0); nextPtr=copy.nextPtr; listNode *listNode:create() /从文件 f3.txt 中读入链表数据; listNode *head=NULL; listNode *p1,*p2; p1=p2=new listNodeLEN; char ch; coutp1-data; num=
9、num+1; if(num=1) head=p1; else p2-nextPtr=p1; p2=p1; p1=new listNodeLEN; coutch; while(ch=y);p2-nextPtr=NULL;coutinsertdata; listNode *p0,*p1; p0=new listNodeLEN; assert(p0!=0); p0-data=insertdata; p0-nextPtr=NULL; p1=new listNodeLEN; assert(p1!=0); p1=head; head=p0; p0-nextPtr=p1;num+=1; coutch; if
10、(ch=y) if(head=NULL) coutdata!=DELDATA p1=p1-nextPtr; if(p1-data=DELDATA) if(p1=head) head=p1-nextPtr;else p2-nextPtr=p1-nextPtr;coutdatanextPtr; while(p!=NULL); void listNode:search(char *sea,listNode *head) listNode *p=new listNodeLEN; listNode *tMAX2; int n=0,j=0; for(int i=0;idata=sea) n+=1; whi
11、le(jnextPtr; if(n=0) coutc; if(c=y) coutdata=0;j-) coutdatach; search(ch,head); coutc; if(c=y) head=del(head,ch); coutinsertdata; head=insert(head); return head; else return head; listNode:listNode() delete nextPtr; *Inform.h*#ifndef Inform_h #define Inform_h #include #include #include #include #inc
12、lude #include #include #include“achieve.h“class Inform friend ostream public: Inform(); Inform(Inform int operator=(const Inform int operator=(char *); int operator!=(char *); Inform Inform(); private: char *number; char *id; char *name; char *sex;achieve ach; char *phonenumber; char *roomnumber; #e
13、ndif*Inform.cpp*#include #include“Inform.h“ostream if(a=y) cout(istream coutt.number; coutt.id; coutt.sex; coutt.phonenumber; coutt.roomnumber; couta; if(a=y) coutch; (t.ach).setnum(ch); inputt.ach; else (t.ach).setnum(0); return input; Inform:Inform() id=new char19; number=new char12; name=new char
14、10; sex=new char4; phonenumber=new char8; roomnumber=new char4; Inform:Inform(Inform assert(id!=0); strcpy(id,p.id); number=new char12; assert(number!=0); strcpy(number,p.number);name=new char10; assert(name!=0); strcpy(name,p.name); sex=new char4; assert(sex!=0); strcpy(sex,p.sex); phonenumber=new
15、char8; assert(phonenumber!=0); strcpy(phonenumber,p.phonenumber); roomnumber=new char4; assert(roomnumber!=0); strcpy(roomnumber,p.roomnumber); ach=p.ach; int Inform:operator=(const Inform else return 0; int Inform:operator=(char *s) if( (strcmp(number,s)=0)|(strcmp(name,s)=0)|(strcmp(id,s)=0)|(strc
16、mp(roomnumber,s)=0)|(strcmp(phonenumber,s)=0) return 1; else return 0; int Inform:operator!=(char *t) if( (strcmp(number,t)=0)|(strcmp(name,t)=0)|(strcmp(id,t)=0)|(strcmp(phonenumber,t)=0)|(strcmp(roomnumber,t)=0) return 0; else return 1; Inform strcpy(id,a.id); strcpy(name,a.name);strcpy(number,a.n
17、umber); strcpy(sex,a.sex); strcpy(phonenumber,a.phonenumber); strcpy(roomnumber,a.roomnumber); return *this; Inform:Inform() delete number; delete id; delete name; delete sex; delete phonenumber; delete roomnumber; *achieve.h* #ifndef achieve_h #define achieve_h #include“subject.h“class achieve frie
18、nd ostream public: achieve(); void countaverage(subject *); int operator=(achieve achieve void instruction(); achieve(); void setnum(int a);int getnum(); subject *TT; private: int num; float sum; float average; #endif*achieve.cpp*#include“achieve.h“ achieve:achieve() TT=new subjectsizeof(subject); v
19、oid achieve:setnum(int a=0) num=a; int achieve:getnum() return num; void achieve:countaverage(subject *t) sum=average=0; float temp=0; for(int i=0;ixuefen; temp+=(t+i)-achievement)*(t+i)-xuefen); average=temp/sum; ostream it.TTi; return input; int achieve:operator=(achieve else return 0; achieve sum
20、=t.sum; for(int i=0;i #include #include #include #include #define MAX1 5class subject friendistream friend ostream coutT.achievement; coutT.xuefen; return input; ostream void welcome();/ void INSTRUCTION();/主界面函数; void main() char pass5; do /clrscr(); welcome(); cinpass; if(strcmp(pass,“E“)=0) exit(
21、1); while(strcmp(pass,passwords)!=0);static listNode *head=new listNodeLEN; INSTRUCTION(); head=head-create(); INSTRUCTION();char ch,c; cinch; while(1) switch(ch) case I:head=head-insert(head);break;case P:head-printlistNode(head);break;case D:coutdeldata;head=head-del(head,deldata);break;case S:cha
22、r *search;search=new char20;coutsearch;head-search(search,head);break;case M:head=head-modify(head);break;case E:exit(2);break;default:coutc; INSTRUCTION();cinch; void INSTRUCTION() cout #include #include #include #include #include #include / /定义课程 struct course /某个学生所学的课程中的某一个 char cname20; /课程名称 f
23、loat grade; /课程成绩 course *Next; /指向下一个课程的指针 ; / /学生类 class student public: student() root = NULL; const maxcourse = 5; factcourse = 0; void readname(char N ); /读入学生的姓名 void getname(char N); /得到学生的姓名 void wrecourse(char N,float score); /要据课程名写入学生课程的成绩 float average(); /学生课程的平均成绩 void addcourse(char N
24、,float g); /给学生增加一门课 int findcourse(char N); /查找是否已有此课程,如果有返回 1,如果没有返回 0int retfactcourse() return factcourse; /得到所学的课程数目course *retroot() return root; /利用键表将所有的课程保存起来 int retmaxcourse() return 5; /得到最多可学的课程数目 void clrroot() /清零 root = NULL; factcourse = 0; private: char sname20; /学生的姓名 int maxcours
25、e; /学生最多可以学五门课程 int factcourse; /学生实际所学的课程数目 course *root; /课程的根结点指针 ;void student:readname (char N)/读入学生的姓名 strcpy(sname,N); void student:getname(char N)/得到学生的姓名 strcpy(N,sname); void student:wrecourse(char N,float score)/要据课程名写入学生课程的成绩 course *p = root; if(p=NULL) return; if(p!=NULL) p = p-Next; w
26、hile(p) if(strcmp(p-cname,N)=0) p-grade = score; p = p-Next; float student:average()/学生课程的平均成绩 float aver=0.0; course *p = root; while (p) aver = aver+p-grade; aver = aver/factcourse; return aver; void student:addcourse (char N,float g)/给学生增加一门课 course *s = new course; s-Next=NULL; if(root = NULL) r
27、oot = s; course *p = root; course *newcourse = new course; newcourse-Next = p-Next; p-Next=newcourse; strcpy(newcourse-cname,N); newcourse-grade = g; factcourse+; int student:findcourse (char N)/查找是否已有此课程,如果有返回 1,如果没有返回 0 course *p = root; if(root=NULL) return 0; p = p-Next; while(p) if(strcmp(p-cna
28、me,N)=0) return 1; p = p-Next; return 0; / struct studentdb student stu; studentdb *Next; ;struct studentname char tname20; /学生的名字 float result; /学生所得的该课程分数 studentname *Next; ; /课程类 class subject public: subject() first = NULL; maxstudent=30; activestudnet=0; float readcredit(); /得到课程的学分 void getcr
29、edit(float a); /设置学分 float getaverage(); /得到学生的平均成绩 float getresult(char N); /查找某个学生的成绩 void getkname(char N); /读出课程的名称 void setkname(char N); /读入课程的名称studentname *retfirst() return first; /返回根结点 void findstudent(studentdb *P); /根据该课程的名称,寻找选这课程的学生 int retactivestudent() return activestudnet; /返回实际学生
30、数 int retmaxstudent() return 30; /返回最多学生数 30 void clractivestudnet() activestudnet = 0; /从文件中读出来后将实际学生数清零 private: int maxstudent; /最多学生数 int activestudnet; /实际学生数 studentname *first; /学生名单 float credit; /该课程的学分 float averagerusult; /该课程的平均成绩 char kname20; /该课程的名称 ;float subject:readcredit ()/得到课程的学
31、分 return credit; void subject:getcredit (float a)/设置学分 credit=a; float subject:getaverage()/得到学生的平均成绩 float k = 0.0; studentname *p; p=first-Next; if(p=NULL) return 0; while(p) k = k + p-result; p = p-Next ; return k/activestudnet; float subject:getresult (char N) /查找某个学生的成绩 studentname *p; p = firs
32、t; while(p) if(strcpy(p-tname ,N)=0) return p-result; p = p-Next ; return -1; void subject:getkname (char N) /读出课程的名称 strcpy(N,kname); void subject:setkname (char N) /读入课程的名称 strcpy(kname,N); void subject:findstudent(studentdb *P) /根据该课程的名称,寻找选这课程的学生 studentname *newcode = new studentname; newcode-N
33、ext=NULL; first = newcode; studentname *T = first; studentdb *K = P-Next; while(K) course *Y = K-stu.retroot(); if(Y =NULL) K = K-Next; continue; if(Y!=NULL) Y = Y-Next; while(Y) if(strcmp(Y-cname,kname)=0) studentname *Acode = new studentname; char Name20; K-stu.getname(Name); strcpy(Acode-tname,Na
34、me); Acode-result = Y-grade; Acode-Next = T-Next; T-Next = Acode; activestudnet = activestudnet + 1; break; Y = Y-Next; K = K-Next; return ; /void tuichu() system(“cls“); couta; if(strlen(a)=1) for(i=1;i2) system(“cls“); cerrA; if(strlen(A)=1) for(i=1;i2) system(“cls“); cerrA; if(strlen(A)=1) for(i=
35、0;i2) cerr=3) system(“cls“); cerrNext; int i; char N20,M20; if(q!=NULL) coutstu.getname(N); coutNext ; q = P-Next; if(q=NULL) return 1; coutN; i=0; q=P-Next; while(q) q-stu.getname(M); if(strcmp(N,M)=0) i+; q = q-Next; int j=0,k=1; if(i=0) cout1) coutk; if(ki|kNext; j=0; while(q) q-stu.getname(M); i
36、f(strcmp(N,M)=0) j+; if(j=k) if(q-stu.retfactcourse()=q-stu.retmaxcourse() coutNext; char N120; system(“cls“); if(t!=NULL) coutsub.getkname(N1); coutsub.readcredit()Next ; char N220; coutN2; t = X-Next; while(t) t-sub.getkname(N1); if(strcmp(N1,N2)=0) if(q-stu.findcourse(N2)=1) coutNext; char NA20;
37、while(t) t-sub.getkname(NA); if(strcmp(NA,N2)=0) if(t-sub.retactivestudent()=t-sub.retmaxstudent () coutNext; q-stu.addcourse(N2,0.0); coutNext; cerrNext; return 1; int menu_1_2(studentdb *P,subjectdb *X) /学生情况 studentdb *q=P-Next; char N20; system(“cls“); coutstu.getname(N); coutstu.retfactcourse()
38、Next ; char M20; coutM; i=0; q=P-Next; while(q) q-stu.getname(N); if(strcmp(N,M)=0) i+; q = q-Next; int j=0,k=1;if(i=0) cout1) coutk; if(ki|kNext; j=0; q=P-Next; while(q) q-stu.getname(N); if(strcmp(N,M)=0) j+; if(j=k) system(“cls“); course *T=q-stu.retroot(); if(T=NULL) coutNext; coutstu.retfactcourse()cnamecname)gradeNext; j=0; q = q-Next; coutNext; char N20; system(“cls“); coutsub.getkname(N); coutsub.retactivestudent()Next ; coutN; coutNext = P-Next ; newnode-stu.readname(N); P-Next = newnode ; return 1; int menu_2_2(subjectdb *P) /增加课程 float k; char N20,M20;