c++青岛理工大学实习

 

 

 

 

程序设计训练

 

 

 

 

姓    名                 

学    号          

专    业         通信工程      

班    级            164        

指导教师       

编写日期          2018.6.28     

 

 

 

 

 

 

 

 

 

程序设计训练任务书

 

一、实习的任务、性质与目的

程序设计训练是集中实践性环节之一,是学习完程序设计基础(C)、数据结构、面向对象(C++)、数据库等程序类课程后进行的一次综合训练。主要训练基本数据结构和算法的程序实现,学习编写中、大型程序(500行以上)的过程和步骤,学习程序的调试技巧和方法,从而能用C/C++语言程序来解决一般实际问题,如各种简单的信息管理系统和趣味小游戏等。

通过该实习,使学生理解和掌握程序设计的过程和步骤,学会基本程序调试技巧和方法,加强学生自主学习、收集资料和动手编程 的能力。

二、实习时间

第四学期的第16周和第17周

三、实习地点

计算中心210室

 

一.基础部分

总结1数字的交换三种方式:数值传递,地址传递,引用传递,三者做了一个比较,数值传递本身没有对原交换数字进交换,2.线段问题对于我而言是一个比较费时的,上网百度了一下,因为它包含的头文件也比较多,要熟悉这些头文件的作用,然后调用其头文件里的函数,主要用到了cmp比较函数和排序函数,算法的核心是利用排序函数先将每行的所有数进行排序,然后用比较函数,和for与if进行组合给个计数器作为输出值。3.猴子称大王,这个数组比较简单难点也就是这个

while(remain>=num)

    {

        for(i=0; i<num; i++)

        {

k = j;

j=(j+1)%amo;

while( per[j]>0 )j=(j+1)%amo;                

        }

链表中用到了链表的基本操作,建立个循环链表

4.冒泡排序:就是用到了两层for循环,像个泡泡一样的去遍历

5字符串问题:定义2个变量p,tmp,tmp一个放目前正在统计次数的字符,p放刚刚读入的字符,还要定义一个count统计当前字符出现的次数如果tmp == p, 那么说明又读进来一个同样的字符,那么这个字符出现的次数count++如果tmp!=p, 那么说明读进来一个新的字符,需要把原来tmp和count输出,然后把tmp置为p,count=1,开始统计p里面的字符出现的次数

 

6.哈希表是一个比较难的;

哈希表是根据关键码而直接进行访问的数据结构,也就是说,通过关键码值映射到表中一个位置来访问记录,以加快查找的速度,本实验哈希函数用除留余数法构造,用伪随机探测散列处理冲突数据结构设计

7.继承就是简单的几个继承的区分,本实验注意的是构造函数的继承

如何区分构造函数,最主要的区别看看函数构造名是否与类的名称是否一致,一致的话就是构造函数

总结一下个人基础部分的整体思路:模块化。分三块,输入。输出及算法部分,算法部分灵活的运用几大结构,最后做完整个基础部分,我感觉到了面向对象的重要性,框架的搭建还是横重要的

 

(每道题的解决思路,程序实现代码,并说明遇到的问题及解决方法、过程。)

1、a、b交换与比较

如何将a、b的值进行交换,使用中间变量?基本要求如下:(1)编写一个交换函数,在主函数中调用。(2)分别使用三种函数参数传递:指针传递(地址传递)、引用传递。

源代码

#include<iostream>

using namespace std;

void Exchg1(int x, int y)// 值传递

{

int tmp;

tmp=x;

x=y;

y=tmp;

cout<<"x="<<x<<"y ="<<y<<endl;

}

void Exchg2(int *px, int *py)//地址传递

{

int tmp=*px;

*px=*py;

*py=tmp;

cout<<"*px="<<*px<<"*py="<<*py<<endl;

}

void Exchg3(int &x, int &y)//引用传递

{

int tmp=x;

x=y;

y=tmp;

cout<<"&x="<<x<<"&y="<<y<<endl;

}

main()

{

int a=4;int b=6;

Exchg1(a,b);//传递的a,b的内容

cout<<"a="<<a<<"b="<<b<<endl;

a=4;b=6;

Exchg2(&a,&b);//a,b的地址值传递给了px,py

cout<<"a="<<a<<"b="<<b<<endl;

a=4; b=6;

Exchg3(a,b);//函数里是用a,b分别代替了x,y。函数里操作的是a,b

cout<<"a="<<a<<"b="<<b<<endl;

}

 

2、线段问题

问题描述:

现在有n个围棋比赛,每个比赛的开始、结束的时间点是知道的。小明认为,参加越多的比赛,水平就能提高的越快。所以,他想知道他最多能参加几个比赛。 如果要参加一个比赛必须善始善终,而且不能同时参加2个及以上的比赛。

输入输出格式

输入格式:

第一行是一个整数n ,接下来n行每行是2个正整数ai,bi(ai<bi),表示比赛开始、结束的时间。

输出格式:

一个整数最多参加的比赛数目。

样例:输入样例:

3

0 2

2 4

1 3

源代码:

#include <cstring>

#include <iostream>

#include <cmath>

#include <stdio.h>

#include <stdlib.h>

#include <string>

#include <iomanip>

#include <vector>

#include <algorithm>//sort 排序函数头文件 

 

typedef struct {//结构体定义

    int start;

    int end;

} Match;

 

const int maxn = 1000010;//常数指针类型

Match matches[maxn];

 

int cmp(Match m1, Match m2) {

    return m1.end < m2.end;

}//cmp是一个函数,可以向其传入两个任意类型变量的地址或指针,但不管传入什么类型,函数内部将该指针转换为int类型

//,也就是说将s所指向的地址上4个字节的数据转换为int型数,t同理,然后将这两个数相减,作为结果返回。

 

using namespace std;

 

int main() {

    int n;int i;

    scanf("%d", &n);//输入n行

    for( i = 0; i < n; i++) {

        scanf("%d%d", &matches[i].start, &matches[i].end);

    //mp是你自己定义的 sort是按从小到大的顺序排序的,如果你要从大到小,就要重载 int cmp(int x,int y){ return x>y; }

}

    sort(matches, matches + n, cmp);

    int end = -1;

    int cnt = 0;

    for( i = 0; i < n; i++) {

        if(matches[i].start >= end) {

            end = matches[i].end;

            cnt++;

        }

    }

    printf("%d", cnt);//cnt相当于计数器

    return 0;

}

 

2、猴子选大王问题(约瑟夫问题)

问题描述:

一堆猴子都有编号,编号是1,2,3 ...m,这群猴子(m个)按照1-m的顺序围坐一圈,从第1开始数,每数到第N个,该猴子就要离开此圈,这样依次下来,直到圈中只剩下最后一只猴子,则该猴子为大王。

基本要求:

(1) 输入数据:输入m,n m,n 为整数,n<m

(2)中文提示按照m个猴子,数n 个数的方法,输出为大王的猴子是几号 ,建立一个函数来实现此功能

(3)分别用数组和链表来实现

源代码

数组:

#include<stdio.h>

int main()

{

    int per[100]= {0};

    int num=0,amo=0;

    int i=0,remain=0,j=0;

 

    printf("输入猴子数:");

    scanf("%d",&amo);

    printf("输入每次数几个猴子:");

    scanf("%d",&num);

    remain=amo;

    j=0;

    int k=0;

    while(remain>=num)//循环条件猴子数不小于每次数几个猴子

    {

        for(i=0; i<num; i++)//小于每次数的猴子数

 

        {

k = j;

j=(j+1)%amo;

while( per[j]>0 )j=(j+1)%amo;                

        }

printf("%d was leaveed.\n",k+1);

        per[k] = 1;//重新开始数数

        remain--;

    }

 

for (i=0; i<amo; i++)

{

if (0 == per[i])

{

printf("最后的猴子大王%d\n", i+1);

}

}

return 0;

}

 

#include<stdio.h>

#include<time.h>

#include<stdlib.h>

#define OK 1

#define ERROR 0

#define TRUE 1

#define FALSE 0

#define maxsize 10

typedef int status;

typedef int elemtype;

 

typedef struct node{

    elemtype num;

    struct node * next;

}node;

 

typedef struct node* linklist;

 

int main(void){

    linklist p,q,head;

    int m,n,king,i,j;

    scanf("%d %d",&m,&n);

    if(m==1)//只有一只猴子时猴王为1 

king=1;

    p=q=(linklist)malloc(sizeof(node));//给新节点分配空间 

    head=p;//head指向首元素节点 

    head->num=1;//给第一只猴子编号 

    for(i=1;i<m;i++){//建立m只猴子围成的圆圈 

        p=(linklist)malloc(sizeof(node));//p为等待插入的节点 

        p->num=i+1;//p的编号为i+1 

        q->next=p;//q始终记录尾节点(实质是链表的尾插法) 

        q=p;

    }

    q->next=head;//链表尾指向链表头 

 

    p=head;//开始计数 

    for(i=1;i<m;i++){//循环m-1轮,淘汰m-1只猴子 

        for(j=1;j<n-1;j++){//让p指向要淘汰的元素的前驱元素 

            p=p->next;

        }

q=p->next;//q指向要淘汰的猴子 

printf("第%d轮淘汰第%d只猴子\n",i,q->num);

p->next=q->next;//删除q 

p=q->next;//一定要让下一次计数起点为被删除元素的后继 

free(q);//释放q 

    }

    king=p->num;

    free(p);

    printf("猴王是第%d\n",king);

}

3、排序问题

请用C或C++写出一个冒泡排序程序,要求输入10个整数,输出排序结果。

源代码:

(1)、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。

(2)、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。

(3)、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。

(4)、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序

 

#include<stdio.h>  

 

void bubblesort(int *list)  

{  

int i,j,temp;  

for(i=0;i<9;i++)   //外层循环控制趟数,总趟数为9

{  

for(j=0;j<9-i;j++) //内层循环为当前j趟数 所需要比较的次数  

{  

if(list[j]>list[j+1])  

{  

temp=list[j];  

list[j]=list[j+1];  

list[j+1]=temp;  

}  

}  

}  

 

for(i=0;i<10;i++)  

{  

printf("%5d",list[i]);  

}  

printf("\n");  

}  

 

int main()  

{  

int list[10];  

int i;  

printf("请输入数列:");  

 

for(i=0;i<10;i++)  

scanf("%d",&list[i]);  

 

printf("冒泡排序后的数列:\n");  

bubblesort(list);  

return 0;  

}  

 

4、字符串问题

转换字符串格式为原来字符串里的字符+该字符连续出现的个数,例如字符串1233422222,转化为1121324125(1出现1次,2出现1次,3出现2次……)。

#include<iostream>  

using namespace std;  

  

int main()  

{  

    char str[50];  

    char tmp;  

    int count = 0;  

    cin>>str;  

    char *p = str;  

    tmp = *p;  

    count++;  

    while(*(++p)!='\0')  

    {  

       if(*p == tmp)//如果当前读入的字符和正在统计的一样,那么出现次数要++  

       {  

             count++;  

             continue;  

       }  

       cout<<tmp<<count;//如果读入一个新的字符,就要把正在统计的字符频率输出,接下来开始统计新读入的字符的出现次数  

       tmp = *p;  

       count = 1;  

    }  

    cout<<tmp<<count;//因为读到'\0'循环退出,最后一个连续的字符序列没有输出,所以在这里追加输出  

    getchar();  

    getchar();  

    return 0;  

}

 

5、hash表

问题描述:

针对某个集体(比如你所在的班级)中的“人名”设计一个哈希表,使得平均查找长度不超过R,完成相应的建表和查表程序。

基本要求:

假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用伪随机探测再散列发处理冲突。

源代码

#include<iostream>

#include<string>

using namespace std;

 

#define HASH_LENGTH 50               //哈希表的长度         

#define M 47                         //随机数

#define NAME_NO 30                   //人名的个数        

 

typedef struct      

{   char *py;    //名字的拼音

int k;       //拼音所对应的整数

}NAME;

 

NAME NameList[HASH_LENGTH];    //全局变量NAME       

 

typedef struct    //哈希表

{   char *py;   //名字的拼音

int k;      //拼音所对应的整数

int si;     //查找长度

}HASH;

 

HASH HashList[HASH_LENGTH];        //全局变量HASH                     

 

void InitNameList() //姓名(结构体数组)初始化          

{   char *f;

int r,s0,i;

for (i=0; i<HASH_LENGTH; i++)

{

NameList[i].py = new char[64];

NameList[i].py[0] = 0;

}

strcpy(NameList[0].py, "zhangwenwu");

strcpy(NameList[1].py, "daining");

strcpy(NameList[2].py, "tanyuxuan");

strcpy(NameList[3].py, "ciyingjuan");

strcpy(NameList[4].py, "xuxin");

strcpy(NameList[5].py, "fuyuzhang");

strcpy(NameList[6].py, "lvjingfan");

strcpy(NameList[7].py, "yaojianxin");

strcpy(NameList[8].py, "hukeke");

strcpy(NameList[9].py, "wangjianxin");

strcpy(NameList[10].py, "zhaoleyi");

strcpy(NameList[11].py, "wenqing");

strcpy(NameList[12].py, "chenghuiming");

strcpy(NameList[13].py, "xujing");

strcpy(NameList[14].py, "zhuyilin");

strcpy(NameList[15].py, "liuxin");

strcpy(NameList[16].py, "chenhe");

strcpy(NameList[17].py, "zhaomaojun");

strcpy(NameList[18].py, "weiyingjian");

strcpy(NameList[19].py, "wangmin");

strcpy(NameList[20].py, "zhangkai");

strcpy(NameList[21].py, "liujingrui"); 

strcpy(NameList[22].py, "wangjimei");

strcpy(NameList[23].py, "mafenjie");

strcpy(NameList[24].py, "mayuxue");

strcpy(NameList[25].py, "dinghanxue");

strcpy(NameList[26].py, "wangqichang");

strcpy(NameList[27].py, "wangwentao");

strcpy(NameList[28].py, "liulijun");

strcpy(NameList[29].py, "lixiaoxia");

 

for(i=0;i<NAME_NO;i++)

{   

s0=0;

f=NameList[i].py;

for(r=0;*(f+r)!='\0';r++) 

/* 方法:将字符串的各个字符所对应的ASCII码相加,所得的整数做为哈希表的关键字*/

s0=*(f+r)+s0;

NameList[i].k=s0;

}

void CreateHashList() //建立哈希表   

int i;

for(i=0; i<HASH_LENGTH;i++) 

{   

HashList[i].py=new char[64];

HashList[i].py[0] = 0; 

HashList[i].k=0;

HashList[i].si=0;

}

for(i=0;i<HASH_LENGTH;i++)

{

int sum=0;

int adr=(NameList[i].k)%M;  

//哈希函数

int d=adr;

if(HashList[adr].si==0)     //如果不冲突

{

HashList[adr].k=NameList[i].k;

HashList[adr].py=NameList[i].py;

HashList[adr].si=1;

}

else   //冲突 

while (HashList[d].k!=0)

{

d=(d+NameList[i].k%10+1)%M;   //伪随机探测再散列法处理冲突    

sum=sum+1;                    //查找次数加1    

};

HashList[d].k=NameList[i].k;

HashList[d].py=NameList[i].py;

HashList[d].si=sum+1;

}

}

}

void FindList() //查找    

string name; 

    int s0=0,r,sum=1,adr,d;

    cout<<"请输入姓名的拼音:"<<endl;     

    cin>>name;; 

    for(r=0;r<20;r++)   //求出姓名的拼音所对应的整数(关键字)

        s0+=name[r]; 

    adr=s0%M;   //使用哈希函数

    d=adr;

    if(HashList[adr].k==s0)          //分3种情况进行判断

cout<<"姓名:"<<HashList[d].py<<" "<<"关键字:"<<s0<<" "<<"查找长度为: 1"<<endl; 

    else if (HashList[adr].k==0) 

cout<<"无此记录!"<<endl;

    else

{   

int g=0;

while(g==0)

{

d=(d+s0%10+1)%M;       //伪随机探测再散列法处理冲突                     

sum=sum+1;

if(HashList[d].k==0)

{

cout<<"无此记录!"<<endl; 

g=1;     

}

if(HashList[d].k==s0)

{

cout<<"姓名:"<<HashList[d].py<<" "<<"关键字:"<<s0<<" "<<"查找长度为:"<<sum<<endl;

g=1; 

}

};   

}

void   Display() // 显示哈希表       

int i;

    float average=0;

 

cout<<"\n地址\t关键字\t\t搜索长度\tH(key)\t 姓名\n"; //显示的格式

    for(i=0; i<50; i++)

{   

cout<<i<<" "; 

        cout<<"\t"<<HashList[i].k<<" ";

        cout<<"\t\t"<<HashList[i].si<<" ";

        cout<<"\t\t"<<(HashList[i].k%M)<<" ";

        cout<<"\t "<<HashList[i].py<<" ";

        cout<<"\n";

}

    for(i=0;i<HASH_LENGTH;i++)

        average+=HashList[i].si; 

    average/=NAME_NO;

cout<<"平均查找长度:ASL("<<NAME_NO<<")="<<average<<endl;

 

}

int main()

{

char x;

InitNameList();                                

CreateHashList (); 

cout<<"d. 显示哈希表 f. 查找 任意键退出   请选择:"<<endl;

while(cin>>x)

{

if(x=='d')

{

Display();

cout<<endl;

}

else if(x=='f')

{

FindList();

cout<<endl;

}

else break;

}

for (int i=0; i<HASH_LENGTH; i++)

{

free(NameList[i].py);

free(HashList[i].py);

}

return 0;

}

6、面向对象问题

编写一个程序,有一个汽车类vehicle,它具有一个需传递参数的构造函数,类中的数据成员:车轮个数wheels和车重weight放在保护段中;小车类car是它的私有派生类,其中包含载人数passenger_load;卡车类truck是vehicle的私有派生类,其中包含载人类passenger_load和载重量payload。每个类都有相关数据的输出方法。

源代码:

#include<iostream>

#include <math.h>

using namespace std;

 

 

class vehicle

{

protected:

int wheels;

int weight;

public:

vehicle(int wh, int we)//构造函数

{

wheels = wh;

weight = we;

}

void disp()//显示函数

{

cout << "wheels=" << wheels << ",weight=" << weight << endl;

}

 

 

};

class car:private vehicle//私有继承

{

int passenger_load;

public:

car(int wh, int we, int pa) :vehicle(wh,we)

{

passenger_load = pa;

}

void disp()//显示函数

{

vehicle::disp();//::重载运算符

cout << "passenger_load=" << passenger_load << endl;

}

 

 

};

class truck :private vehicle//私有继承

{

int passenger_load;

int payload;

public:

truck(int wh, int we, int pa,int pay) :vehicle(wh, we)

{

passenger_load = pa;

payload = pay;

}

void disp()//显示函数

{

vehicle::disp();

cout << "passenger_load=" << passenger_load << "payload=" << payload << endl;

}

};

 

void main()

{

vehicle v(100, 99);

v.disp();

 

car c(50, 40, 30);

c.disp();

 

truck t(20, 15, 10, 5);

t.disp();

system("pause");

}

 

 

二、综合题目

学生综合测评系统

1、需求分析

每个学生的信息为:学号、姓名、性别、家庭住址、联系电话、语文、数学、外语三门单科成绩、考试平均成绩、考试名次、同学互评分、品德成绩、任课教师评分、综合测评总分、综合测评名次。考试平均成绩、同学互评分、品德成绩、任课教师评分分别占综合测评总分的60%,10%,10%,20%。

A、学生信息处理

(1) 输入学生信息、学号、姓名、性别、家庭住址、联系电话,按学号以小到大的顺序存入文件中。

(2) 插入(修改)同学信息:

(3) 删除同学信息:

(4) 浏览学生信息:

B、学生数据处理:

(1) 按考试科目录入学生成绩并且按公式:考试成绩=(语文+数学+外语)/3 计算考试成绩,并计算考试名次。

(2) 学生测评数据输入并计算综合测评总分及名次。

提示:综合测评总分=(考试成绩)*0.6+(同学互评分)*0.1+品德成绩*0.1+任课老师评分*0.2。

(3) 学生数据管理

提示:输入学号,读出并显示该同学信息,输入新数据,将改后信息写入数据库

(4) 学生数据查询:

提示:输入学号或其他信息,即读出所有数据信息,并显示出来。

C、学生综合信息输出提示:输出学生信息到屏幕

2、总体设计

(对设计目标进行总体分析,说明要采用的基本思路,说明遇到的问题和解决方法。说明完成本次课程设计的完整过程。要描述程序的设计思想,画出本次课程设计完整的程序框图或流程图。没有图不给分)

设计采用模块化结构设计,主要包括:主菜单(menu)下的学生信息处理系统(info_menu)、学生数据处理系统(data_menu)、学生综合信息输出(shuchu)、帮助信息(help)、退出系统;学生信息处理系统(info_menu)下的输入学生信息(info_input)、修改学生信息(xiugai)、删除学生信息(info_del)、浏览学生信息(info_output)、返回主菜单;学生数据处理系统下的(data_menu)录入成绩数据(data_input)、修改学生数据(data_xiugai)、学生数据查询(data_chaxun)、返回主菜单。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3、详细设计

(要求列出所有编写的函数清单,说明每个函数的功能,各形式参数的意义,画出各函数的调用关系图。即模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等。还包括数据库需求分析;数据库概念结构设计(E-R图);数据库逻辑结构设计;类层次图;界面设计与各功能模块实现。)

void info_daoru();//学生信息导出文件函数

void info_xieru();//学生信息写入文件函数

void info_del();//学生信息删除文件函数

void info_xiugai();//学生信息修改文件函数

void data_xieru();//导入数据

void data_daoru();//写入数据

void data_xiugai();//删除数据

void data_chaxun();//查询数据

void data_input();//输入数据

void shuchu();//学生综合信息输出

 

 

 

 

 

 

 

学号

姓名

性别

家庭住址

联系电话

语文

...

总成绩

201627255

 

四川

1111111

96

...

86

201627256

 

青岛

2222222

78

...

32

...

...

...

..

...

...

...

...

201627258

 

 

 

 

 

 

 

窗口背景与字体颜色:system("color 0A");0代表背景黑 A代表字体颜色为绿色

 

4、程序运行结果测试与分析

(调试出现的主要问题,编译语法错误及修改,重点是运行逻辑问题修改和调整。要针对程序处理的不同情况列出有代表性的输入和输出,用足够多的实例说明程序完成了设计任务和目标。)

 

调试出现的主要问题:在用win10系统进行调试的时候,容易出现兼容性的问题,这个问题不好解决,试了试在虚拟机上搭建win7环境,也算解决了这个问题

5、使用说明书

说明如何使用你编写的程序,详细列出每一步的操作步骤。

1.首先任意键进入主菜单

2.接下来就很容易操作了

程序中有个帮助信息如下:

void help()                      //帮助信息

{

 

system("cls");                                     //清屏

 

printf("        *  欢迎使用青理学生综合管理系统! *\n\n");

printf("  本系统可以存储学生的基本信息和各科成绩,并能计算考试平均成绩,综合测评成绩和排名。\n");

printf("  基本信息包括:学号、姓名、性别、家庭住址、联系电话;\n  各科成绩包括:语文、数学、外语成绩;\n");

printf("  其它包括:考试名次、同学互评分、品德成绩、任课教师评分等。\n");

printf("  说明:考试成绩排名是按照考试成绩计算的(考试成绩=(语+数+外)/3);\n");

printf("  综合测评总分=((考试成绩)*0.6+(同学互评分)*0.1+(品德成绩)*0.1+(任课教师评分)*0.2)\n");

printf("    其它请按照提示操作即可。\n\n");

printf("\n\n\t\t");

system("pause");

 

}

6、关键源程序(带注释)。

int main()    //主函数

{

system("color 0A");//窗口设置

void data_menu();

void info_menu();

void help();

void menu();

 

printf("\n\n\n\t\t............欢迎使用青理学生综合管理系统............\n\n");

printf("\t\t \t\t本程序由通信164吴勃程序编写\n\n");

printf("\n\n\t\t");

system("pause");

    menu();

return 0;

}

 

void info_menu()     //学生信息菜单

{

int choice;

while(1){

system("cls");  //清屏

    printf("\n\n\n\n\t\t☆☆☆☆青理学生信息处理系统☆☆☆☆\n\n");

     printf("\t\t\t1.输入学生信息\n");

     printf("\t\t\t2.修改学生信息\n");

     printf("\t\t\t3.删除学生信息\n");

     printf("\t\t\t4.浏览学生信息\n");

     printf("\t\t\t0.返回主菜单\n\n");

     printf("\t\t请输入序号选择操作:");

     scanf("%d",&choice);

      if(choice==0) break;

    switch(choice){

          case 1: info_input(); info_xieru(); break;

            case 2: info_xiugai(); break;

            case 3: info_del(); break;

case 4: info_output(); break;

        default: printf("\n\t输入有误!请重新输入!\n\n"); break;

}

}

 

}

 

 

void data_menu()  //数据处理菜单

{

int choice;

printf("\n\t在进入学生数据管理前,请确认学生信息已全部完成!\n");

printf("\n\t是否继续?输入数字选择(0:返回;其它数字继续。)\n");

scanf("%d",&choice);

if(choice==0) return;

while(1){

system("cls");   //清屏

    printf("\n\n\n\n\t\t☆☆☆☆☆学生数据处理系统☆☆☆☆☆\n\n");

     printf("\t\t\t● 1.录入成绩数据\n");

     printf("\t\t\t● 2.修改学生数据\n");

     printf("\t\t\t● 3.学生数据查询\n");

     printf("\t\t\t● 0.返回主菜单\n\n");

     printf("\t\t请输入序号选择操作:");

     scanf("%d",&choice);

      if(choice==0) break;

    switch(choice){

         case 1: data_input(); break;

            case 2: data_xiugai(); break;

            case 3: data_chaxun(); break;

        default: printf("\n\t输入有误!请重新输入!\n\n"); break;

}

}

 

}

 

void menu()   //主菜单函数

{

int choice;

while(1){

system("cls");

    printf("\n\n\n\n\t\t-------- ※主 - - - -菜- - - - 单※ --------\n\n");

    printf("\t\t\t●  1.学生信息处理系统\n");

    printf("\t\t\t●  2.学生数据处理系统\n");

    printf("\t\t\t●  3.学生综合信息输出\n");

    printf("\t\t\t●  4.帮助信息\n");

    printf("\t\t\t●  0.退出系统\n\n");

    printf("\t\t请输入序号选择操作:");

    scanf("%d",&choice);

printf("\n");

if(choice==0){

printf("\t\t☆☆☆☆你已经退出,谢谢使用青理学生综合管理系统!☆☆☆☆\n\n\t\t");

break;

}

switch(choice){

     case 1 : info_menu(); break;

     case 2 : data_menu(); break;

         case 4 : help();  break;

     case 3 : shuchu(); break;

         default: printf("\n\t输入有误!请重新输入!\n\n"); break;

 

}

}

}

 

三、结论与心得

    本小组是共同完成的题目本人主要完成C++部分的非数据库连接,总结一下个人基础部分的整体思路:模块化。分三块,输入。输出及算法部分,算法部分灵活的运用几大结构,最后做完整个基础部分,我感觉到了面向对象的重要性,框架的搭建还是很重要的

综合部分:在调试部分还是比较费事的,首先的问题就是软件的兼容性,在个人win10笔记本中安装vc++6.0,发现无法运行,上网找到各种解决办法,发现都无济于事,最后只能在虚拟机中运行win7环境,去运行代码,在个人基础做完的时候,做一个学生管理评测主要采取的是模块化方法,在机房里尝试着连接mysql数据库,按照老师发的文档里的步骤去进行操作,但是卡在了如何在vc里面用函数实现对数据库的操作,上午百度了几天,发现他还需要学习一下语句,还有需要包含mysql的头文件,添加的时候在网上没找到,加上自己也不知道如何去写,由于时间不够,还有自己的学习能力不是那么快所以这部分没有完成,今后在学习Java的时候要加强自己在连接数据库这部分的知识,小组成员用php+HTML做了一个简易的学生成绩系统,他用的是phpstudy和甲骨文公司的集成软件NetBeans(NetBeans项目由一个活跃的开发社区提供支持, NetBean开发环境提供了丰富的产品文档和培训资源以及大量的第三方插件。NetBeans是开源软件开发集成环境,是一个开放框架,可扩展的开发平台,可以用于Java、C/C++,PHP等语言的开发,本身是一个开发平台,可以通过扩展插件来扩展功能。 在 NetBeans Platform 平台中,应用软体是用一系列的软体模组(Modular Software Components)建构出来。而这些模组是一个jar档(Java Archive File)它包含了一组Java程式的类别而它们实作全依据依 NetBeans 定义了的公开介面以及一系列用来区分不同模组的定义描述档(Manifest File)。有赖于模组化带来的好处,用模组来建构的应用程式可只要加上新的模组就能进一步扩充)在和小组成员讨论,发现这两款集成的软件确实带来很多的方便,PHPstudy中的mysql图形化操作提高了效率,

 

 

 

 

 

 

今后要继续尝试用java语言实行数据库的连接。

附:在环境的搭建中有两条建议:1.安装尽量别汉化,路径尽量是英文别包含汉字

2.了解到了各个版本windows操作系统与MacBook环境对软件的优缺点, windows系列中win7还是更适合编程

3.综合题借鉴CSDN博客

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值