C++课程设计完整版_第1页
C++课程设计完整版_第2页
C++课程设计完整版_第3页
C++课程设计完整版_第4页
C++课程设计完整版_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上信息管理与系统开发设计综合模拟实习一、实习目的通过模拟实习,要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。信管11级学生的模拟实习主要是复杂程序和简单软件的实现。通过该模拟实习,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。二、实习环境计算机硬件配置:VC+6.0操作系统: Win7旗舰版开发环境:单核CPU;内存1G或以上,硬盘空间320G或以上,100M或1000M网卡。三、实习内容内容一:纸牌游戏。任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一

2、次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;.再依次5的倍数的牌翻一次,6的,7的 直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?内容二:文章编辑。功能:输入一页文字,程序可以统计出文字、数字、空格的个数。静态存储一页文章,每行最多不超过80个字符,共N行;要求(1)分别统计出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。存储结构使用线性表,分别用几个子函数实现相应的功能;输入数据

3、的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符号。输出形式:(1)分行输出用户输入的各行字符;(2)分4行输出"全部字母数"、"数字个数"、"空格个数"、"文章总字数"(3)输出删除某一字符串后的文章;内容三:设计学生成绩管理系统。该系统中存储学生的学号、姓名、性别、年龄、课程成绩等信息。要求:1)浏览学生信息 2)添加学生信息 3)删除学生信息 4)查找学生信息 5)修改学生信息 6)对成绩的处理7)按照学生某门课程的成绩对学生排序 求出每个学生各门课程的总成绩、平均成绩、最高分和最低分。 求出某一

4、门课程所有学生的总成绩、平均成绩、最高分和最低分。四、算法分析、设计与描述1算法分析和设计内容一:由题目可知,总共有52张牌,且最开始的状态都是正面朝上,所以我们先定义一个数组flag,这个数组存储52个数据,下标是0-51,我们用一个for循环将所有牌的状态值都赋值为1,代表正面向上。如果反面朝上,则将其赋值为0。然后用一个for循环来控制基数的增加,用j变量代替,它的取值范围是2,52,再用一个for循环嵌套在上一个for循环中,用来遍历所有牌,由于数组下表是从0开始,所以要用(i+1)%j=0作为条件来给相应的牌赋状态值。这样就实现了当基数是2时,找出符合条件的牌并翻转;当基数是3时,找

5、出相应的牌并翻转依此类推,直到基数j>52,不符合j<=52的条件,而跳出循环。至此,flag数组中元素的值将不会再是都为1,如果仍是正面朝上,flagi的值仍为1,否则为0。最后我们再用一个for循环来遍历flag数组,并将flagi的值为1的牌对应的i值加1再输出,即输出i+1,代表第i+1张牌是正面朝上的。内容二:本程序是对一段英文文章的内容进行处理,存储方式采用链式存储,没有文件操作,故本程序对其文本内容的所有操作都是在链表中进行的。对于文本的输入,采用头插法将文本信息存储到链表已申请好的存储空间中,在此部分设计中最大的问题在于输入文章过程中输入的字符数大于80时如何换行;

6、对于文本内容的统计,使用循环对已存储的文章进行匹配,大写字母数、小写字母数、空格数、数字数直接通过比较即可得到,标点符号通过ASC比较即可得到;对于文本内容的处理,查找部分仍是使用循环对已存储的文章进行匹配,判断需要查找的字符或者字符串是否与文章中某部分内容相同,如果存在相同的记录相同的个数及位置并输出个数及位置。删除部分先使用程序的查找功能对文章中需要删除的字符或者字符串进行查找,然后对其进行删除。插入部分为通过输入的插入位置(行、列)将字符或者字符串插入到文章制定位置。内容三:该程序分6个模块完成各项功能,通过主函数调用个函数完成实验,以达到实验目的。 1、显示模块:用于对学生的

7、基本信息的显示,可以用函数void print(ID *head)来实现, 2、添加学生信息模块:其中包括学生的学号,姓名,年龄,性别以及学生的高数成绩、线代成绩、英语成绩;可用函数ID *cin(ID *head)来实现此操作。 3、查询模块:用于对学生的基本信息查询,通过学生的学号进行查找,可用ID *find(ID *head) 来实现。通过学好查询,找到学生信息,输出包括初始是输入的一切信息。 4、排序模块:可用函数ID *sort(ID *head来实现。其中通过平均分的高低来比较,并

8、且以此来排序。 5、删除学生信息模块:通过学生的学号来查找,找出相应信息确定删除,可以通过函数ID *delet(ID *head)实现此功能。 6、修改学生信息模块:通过对学生学号查找,找出相应的信息进行修改,可以通过函数ID *alter(ID *head)实现此操作。 7、安全退出系统与自动保存文件模块:可用一个函数ID *over(ID *head)来实现,首先将信息保存到文件中,释放动态创建的内存空间,再退出此程序。2算法描述(可插入流程图)内容一:开始建立一个线性表L,将所有变量赋初值为1,表

9、示牌正面向上i>=2&&i<=52j>=i&&j<=52,j%i=0翻牌,如果flagj=1,则变为0翻牌,如果flagj=1,则变为0j+输出线性表中正面向上的牌的编号结束内容二:(1)、统计字符个数算法流程图i=0 n=0i<N i>=Nj=0 len=strlen(wzi)j<len j>=lenif(wzij>=n1&&wzij<=n2)n+j+i+return n算法结束 (2)、查找某一字符串出现的次数算法流程图i=0 n=0i<N i>=Nc=strstr(wz

10、i,s)c!=0 c=0c=strstr(c+lens,s)n+i+return n算法结束(3)、删除某一字符串算法流程图i+i=0 n=0i<N i>=Nc=strstr(wzi,s)c!=0 c=0leni=strlen(wzi);lenc=strlen(c);p=leni-lencreturn n算法结束for(k=1;k<=lens;k+)for(j=p;j<=leni;j+)wzij=wzij+1; leni=strlen(wzi) wzij-1='0'leni=strlen(wzi);c=strstr(wzi,s); 内容三:根据本系统的模

11、块划分及流程,分别从学生学籍管理,成绩管理,和用户管理等主要功能模块进行分析。 用户登陆学籍添加学籍删除用户管理模块图 学生信息管理功能管理模块图成绩管理添加成绩查询成绩成绩的汇总信息:总分,平均分,排序等。成绩的修改成绩的删除成绩管理模块五、程序设计1程序设计的基本思路内容一:第一步:定义i,j变量和flag52数组。即int i,j,flag52; 第二步:利用一个for循环,将flag数组中所有元素的值赋为1,表示正面朝上。即for(i=0;i<52;i+) flagi=1;第三步:用一个for循环控制基数的变化,再用一个for循环控制牌的数量并嵌套在上一个循环中,再用一个if判断

12、,判断其是否符合被翻转的条件。即 for(j=2;j<=52;j+)for(i=0;i<52;i+) if(i+1)%j=0) flagi=flagi?0:1; printf("正面向上的牌:n"); 第四步:对flag数组进行遍历,输出正面向上的牌。即for(i=0;i<52;i+) if(flagi) printf("%dn",i+1); 内容二:存储结构:采用单链表结构存储文章,每个结点存储一行,每行最长不超过80个字符。 一、输入模块结构定义: typedef struct line ch

13、ar *data;/字符串指针需要时动态分配内存      struct line *next; LINE;算法描述:用gets函数接收输入,每遇到一个回车换行就新建一个结点,将当前行存入其data域。当发现输入为E时,在Data的最后加上字符串结束标志,并置当前结点的Next指针域为NULL。 二、统计模块 模块包括统计全部字母数,统计数字个数,统计空格个数,以及统计文章总字数,这四个部分的实现算法大体相同,四者的关系是:全部字母数数字个数空格个数文章总字数,也就是说可以在统计出其中

14、三者的前提下计算出第四个的数量。 另外一个重要的统计功能是统计某一字符串在整篇文章中出现的次数,这个需要用到串的模式匹配算法来实现。 三、删除模块 删除模块的算法思想类同统计字符串的算法思想,由于采用了链表的存储结构,使得删除算法的时间复杂度大大减少。  void Del_String(LINE * &head,char *sch) /删除指定的字符串     LINE *p=head;   

15、60;  do          while(strstr(p->data,sch)!=NULL)del_string_word(p->data,sch);  while(p=p->next)!=NULL);    /遍历链表 内容三:该系统由以下功能模块组成:1.登录模块: 输入相应的信息登陆该系统。2.系统维护模块: 课程设置子模块:在每学期开始需要进行本学期需要开设课程的设置。在某一课程发生变动时可以进行课程的维

16、护。 3学生信息管理模块:新生信息录入子模块:在每学年开始或中间可以进行学生信息的录入,包括学生的基本信息等。学生信息查询子模块:方便教务管理人员快速的查找某一学生。分为按照学生的姓名进行查找和按照学生的所在班级名进行查找。利于管理人员随时掌握学生信息。更新学生信息子模块:教务管理人员可以随时更改学生的某些信息,包括学生姓名、身份证号、班级等信息的更改。4学生成绩管理模块:学生成绩录入子模块:按照学生考试的时间和课程录入学生的考试成绩。学生成绩查询子模块:方便教务管理人员快速的查找某一学生的成绩。分为按照学生的姓名进行查找和按照学生的所在班级名进行查找。利于管理人员随时掌握学生考试信息。该系统

17、的所有模块的设计均采用VC+6.0为开发环境,在各个模块的设计中都使用主要应用的函数和语句有循环,查找,删除等。2程序代码内容一:#include<stdio.h>void main()int i,j,flag52;for(i=0;i<52;i+)flagi=1;for(j=2;j<=52;j+)for(i=0;i<52;i+)if(i+1)%j=0)flagi=flagi?0:1;printf("正面向上的牌:n");for(i=0;i<52;i+)if(flagi)printf("%dn",i+1);内容二:#in

18、clude <string.h>#include <stdio.h> typedef struct line char *data; struct line *next;LINE; /创建链表,向里面输入文本数据/向屏幕输出文字void OutPut(LINE * &head) LINE *p=head; printf("输入的文章为:n"); do printf("%sn",p->data); while(p=p->next)!=NULL); /遍历链表printf("n");void m

19、enu()printf("*文章编辑*n");printf("*n");printf("1.统计文章中全部英文字母数 n");printf("2.统计文章中空格个数 n");printf("3.统计文章中数字个数 n");printf("4.统计文章总字数 n"); printf("5.统计指定字符串在文中出现的次数 n");printf("6.删除指定字符串 n");printf("*n");void Create

20、(LINE * &head) printf ("请输入一页文章,以Ctrl+E(E)为结尾(每行最多输入80个字符):n"); LINE *p=new LINE; /首先为链表建立一个附加表头结点 head=p; /将头结点付给表头指针 char tmp100; while(1) gets(tmp); /输入字符串 if(strlen(tmp)>80) printf("每行最多输入80个字符!"); break; if(tmp0=5)break; /如果发现输入E,则退出输入 p=p->next=new LINE; p->dat

21、a=new charstrlen(tmp)+1; /为结点分配空间 strcpy(p->data,tmp); if(tmpstrlen(tmp)-1=5) /除去最后一个控制符E p->datastrlen(tmp)-1='0' break; p->next=NULL; /最后一个指针为空 head=head->next; OutPut(head); printf("n"); menu();/统计英文字母数void CountLetter(LINE * &head) LINE *p=head; int count=0;do i

22、nt Len=strlen(p->data); /计算当前data里的数据元素个数 for(int i=0;i<Len;i+)if(p->datai>='a'&&p->datai<='z')|(p->datai>='A'&&p->datai<='Z') /计算字母数count+; while(p=p->next)!=NULL); /遍历链表 printf("全部英文字母数%d n", count);/返回文章里 p

23、rintf("n"); menu();void CountNumber(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p->data); for(int i=0;i<Len;i+) if(p->datai>=48 && p->datai<=57)count+; while(p=p->next)!=NULL); printf("文章中数字个数: %d n",count); printf("n"); m

24、enu();void CountSpace(LINE * &head) LINE *p=head; int count=0; do int Len=strlen(p->data); for(int i=0;i<Len;i+) if(p->datai=32)count+; while(p=p->next)!=NULL); printf("空格个数y: %d n", count); printf("n"); menu();void CountAll(LINE * &head) LINE *p=head; int cou

25、nt=0; do count+=strlen(p->data); while(p=p->next)!=NULL); printf("文章总字数: %d n",count); printf("n"); menu();void FindString(LINE * &head) LINE *p=head; int count=0;int len1=0; int len2; int i,j,k; char str120; printf("n"); printf("请输入要统计的字符串:"); scanf

26、("%s",str1); len2=strlen(str1); do len1=strlen(p->data); for(i=0;i<len1;i+) if(p->datai=str10)k=0; for(j=0;j<len2;j+) if(p->datai+j=str1j) k+;if(k=len2)count+;i=i+k-1; while(p=p->next)!=NULL);/遍历链表 printf("该字符串在文中出现的次数: %d n",count); printf("n"); menu(

27、);/删除指定的字符串void delstringword(char *s,char *str) /*s为输入的字符串,*str为将要删除的字符 char *p=strstr(s,str); /从字符串中寻找str第一次出现的位置 char tmp80; int len=strlen(s); int i=len-strlen(p); int j=i+strlen(str); int count=0; for(int m=0;m<i;m+)tmpcount+=sm; for(int n=j;n<len;n+)tmpcount+=sn; tmpcount='0' str

28、cpy(s,tmp); void DelString(LINE * &head) LINE *p=head;char str20; printf("请输入要删除的某一字符串:"); scanf("%s",str); do if(strstr(p->data,str)!=NULL)delstringword(p->data,str);while(p=p->next)!=NULL); printf("删除指定字符串后的文章为a: n");OutPut(head); printf("n"); m

29、enu();void main() LINE *head; int i; Create(head); for(;) printf("请输入当中任意一个数字:n"); scanf("%d",&i); switch(i) case 1:CountLetter(head);break; case 2:CountSpace(head);break;case 3:CountNumber(head);break; case 4:CountAll(head);break; case 5:FindString(head);break; case 6:DelStr

30、ing(head);break; default:printf("您输入的数字错误n"); 内容三:# include <iostream># include <fstream># include <string.h>#include <conio.h>/用getch()();using namespace std;/Student类class Studentpublic: char name20; char Id20; int Cnum; /C课程得分 int Mnum; /数学课程得分 int Enum; /英语课程得分

31、int sum; /总分 Student * Next; void Input() cout<<"tt请输入学生的姓名:" cin>>name; cout<<"tt请输入学生的学号:" cin>>Id; cout<<"tt请输入C课程的成绩:" cin>>Cnum; cout<<"tt请输入数学课程的成绩:" cin>>Mnum; cout<<"tt请输入英语课程的成绩:" cin>

32、>Enum; sum=Cnum+Mnum+Enum; void ReadFile(istream & in) in>>name>>Id>>Cnum>>Mnum>>Enum>>sum; void Show() cout<<"姓名:"<<name<<endl<<"学号:"<<Id<<endl<<"C+:"<<Cnum<<endl <<&

33、quot;数学:"<<Mnum<<endl<<"外语:"<<Enum<<endl<<"总成绩:"<<sum<<endl<<endl<<endl; ;/Studentmassage类class Studentmassagepublic: Studentmassage(); Studentmassage(); void ShowMenu(); void Find(); void Save(); void ModifyItem();

34、 void RemoveItem(); void Swap(Student *,Student *); void Sort(); /void Unpass(); int ListCount(); /void Average(); void Display() for(Student * p=Head->Next;p!=End;p=p->Next) p->Show(); cout<<"输入任意字符!继续" getch(); void AddItem() End->Input(); End->Next=new Student; End=

35、End->Next; cout<<"添加成功!"<<endl; cout<<"输入任意字符!继续" getch(); private: Student * Head,* End; ifstream in; ofstream out; Student *FindItem(char * name) for(Student * p=Head;p->Next!=End;p=p->Next)/匹配成功则返回上一个指针,不成功就返回空 if(!strcmp(p->Next->name,name)ret

36、urn p; return NULL; Student *FindID(char * Id) for(Student * p=Head;p->Next!=End;p=p->Next)/匹配成功则返回上一个指针,不成功就返回空 if(!strcmp(p->Next->Id,Id)return p; return NULL; ;/构造函数Studentmassage:Studentmassage() Head=new Student; Head->Next=new Student; End=Head->Next; in.open("sort.txt&q

37、uot;); if(!in) cout<<"这是一个新系统,无学生信息。请先输入。"<<endl; else while(!in.eof() End->ReadFile(in); if(End->name0='0')break; End->Next=new Student; End=End->Next; in.close(); cout<<"tt读取学生信息成功!"<<endl; /析构函数Studentmassage:Studentmassage() Save();

38、 for(Student * temp;Head->Next!=End;) temp=Head->Next; Head->Next=Head->Next->Next; delete temp; delete Head,End;/菜单void Studentmassage:ShowMenu() cout<<" 学 生 成 绩 管 理 系 统 "<<endl; cout<<" "<<endl; cout<<" 1.增加学生成绩 "<<en

39、dl; cout<<" 2.显示学生成绩 "<<endl; cout<<" 3.排序统计成绩 "<<endl; cout<<" 4.查找学生成绩 "<<endl; cout<<" 5.删除学生成绩 "<<endl; cout<<" 6.修改学生信息 "<<endl; cout<<" 0.安全退出系统 "<<endl; cout<

40、<"nttntt请选择:"/查找函数void Studentmassage:Find() char name20 ,Id10; int x; Student * p=NULL; cout<<"ntt*n" cout<<"tt 1.按学生的姓名查找ntt 2.按学生学号查找" cout<<"ntt*n请选择:" cin>>x; switch(x) case 1:cout<<"tt请输入要查找的学生的姓名:"cin>>na

41、me; if(p=FindItem(name) p->Next->Show(); cout<<"输入任意字符!继续" getch(); else cout<<"tt没有找到该姓名的学生!"<<'n'<<endl; cout<<"输入任意字符!继续" getch(); break; case 2: cout<<"tt请输入要查找的学生的学号:"cin>>Id; if(p=FindID(Id) p->N

42、ext->Show(); cout<<"输入任意字符!继续" getch(); else cout<<"tt没有找到该学好的学生!"<<'n'<<endl; cout<<"输入任意字符!继续" getch(); break; /修改信息void Studentmassage:ModifyItem() /修改信息 char name20; Student * p=NULL; cout<<"tt请输入要修改的人的姓名:"cin

43、>>name; if(p=FindItem(name) cout<<"tt已找到学生的信息,请输入新的信息!"<<endl; p->Next->Input(); cout<<"修改成功!"<<endl; cout<<"输入任意字符!继续" getch(); else cout<<"tt没有找到!"<<endl; cout<<"输入任意字符!继续" getch(); /删除信息v

44、oid Studentmassage:RemoveItem() / 删除信息 char name20; Student * p=NULL,*temp=NULL; cout<<"tt请输入要删除的学生的姓名:"<<endl;cin>>name; if(p=FindItem(name) temp=p->Next; p->Next=p->Next->Next; delete temp; cout<<"tt删除成功!"<<endl; cout<<"输入任意字

45、符!继续" getch(); else cout<<"tt没有找到!"<<endl; cout<<"输入任意字符!继续" getch(); /void Studentmassage:Swap(Student *p1, Student *p2)/交换两个combox变量的数据域 Student *temp=new Student; strcpy(temp->name,p1->name); strcpy(temp->Id,p1->Id); temp->Cnum=p1->Cnum

46、; temp->Mnum=p1->Mnum; temp->Enum=p1->Enum; temp->sum=p1->sum; strcpy(p1->name,p2->name); strcpy(p1->Id,p2->Id); p1->Cnum=p2->Cnum; p1->Mnum=p2->Mnum; p1->Enum=p2->Enum; p1->sum=p2->sum; strcpy(p2->name,temp->name); strcpy(p2->Id,temp-&g

47、t;Id); p2->Cnum=temp->Cnum; p2->Mnum=temp->Mnum; p2->Enum=temp->Enum; p2->sum=temp->sum;/int Studentmassage:ListCount()/统计当前链表的记录总数,返回一个整数 if(! Head) return 0; int n=0; for(Student * p=Head->Next;p!=End;p=p->Next) n+; return n;/void Studentmassage:Sort()/对当前链表进行排序 cout

48、<<"Sorting."<<endl; Student *p=NULL,*p1=NULL,*k=NULL; int n=Studentmassage:ListCount(); if(n<2) return; for(p=Head->Next;p!=End;p=p->Next) for(k=p->Next;k!=End;k=k->Next) if(p->sum>k->sum) Studentmassage:Swap(p,k); cout <<"排序完成!"<<e

49、ndl; getch(); return;/保存函数void Studentmassage:Save() out.open("sort.txt"); for(Student *p=Head->Next;p!=End;p=p->Next) out<<p->name<<"t"<<p->Id<<"t"<<p->Cnum<<"t" <<p->Mnum<<"t"<<

50、;p->Enum<<"t"<<p->sum<<'n' out.close();/主函数int main() int x,i=0; bool quit=false; cout<<"tt§§§§§§§§§§§§§§§§§§§§§§§§§§

51、"<<endl; for(i=0;i<3;i+) cout<<"tttttttt "<<endl; cout<<"tt【 欢迎进入学生成绩管理系统 】"<<endl; for(i=0;i<3;i+) cout<<"tttttttt "<<endl; cout<<"tt§§§§§§§§§§§§

52、§§§§§§§§§§§§§§n"<<endl; Studentmassage Grade; cout<<"按任意键开始" getch(); while(!quit) system("cls"); Grade.ShowMenu(); cin>>x; switch(x) case 0:quit=true;break; case 1:Grade.AddItem();break; case 2:Grade.Display();break; case 3:Grade.Sort();break; case 4:Grade.Find(

温馨提示

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

评论

0/150

提交评论