编程实习报告

《编程实习》实习报告

学 号: **.

班 级: **.

学生姓名:**

起始日期: 20**/6/23 .

完成日期: 20**/7/4 .

一、任务要求

功能分析与设计:画出功能流程图和功能结构图

根据功能分析与设计,完成系统的编码和调试

对系统进行功能、可操作性、稳定性测试

编写编程实习报告,并在答辩时上交

二、详细设计

InsertStudent函数

DeleteStudent函数

SortClass函数

ShowClass函数

EditMarks函数

三、编码实现

(编写各函数的程序代码)

插入函数

void InsertStudent(char*** students,int*** marks)

{

int found, i; //定义变量found, i, j, size

char** students1; //姓名数组头指针

int** marks1; //成绩数组头指针

students1 = *students; //使students1指向students

marks1 = *marks; //使marks1指向marks

char *name; //定义char型变量name

printf("Enter Student Name to be added to Class List:\n"); //显示这句话

fflush(stdout); //清除文件缓冲区

name = ReadLine(); //将读取到的字符赋值给name

if (students1 == NULL) //如果指针变量students1为空

{

if ((students1 = (char**) malloc(2*sizeof(char*))) == NULL)merror(2); //如果没有申请到内存空间则打出警告

if ((students1[0] = (char*) malloc(strlen(name)+1)) == NULL)merror(3);//如果没有申请到内存空间则打出警告

strcpy(students1[0],name); //将name全部复制到students1[0]里

students1[1] = NULL; //定义students1[1]为空

if ((marks1 = (int**) malloc(2*sizeof(int*))) == NULL)merror(4);//如果没有申请到内存空间则打出警告

if ((marks1[0] = (int*) malloc(5*sizeof(int))) == NULL)merror(5);//如果没有申请到内存空间则打出警告

marks1[0][0]=marks1[0][1]=marks1[0][2]=marks1[0][3]=marks1[0][4]=NULL;

marks1[1] = NULL; //定义marks1[1]为空

*students = students1; //将students1赋值给指针变量students

*marks = marks1; //将marks1赋值指针变量marks

return;

}

/* do we have the student yet ? */

for(found = i = 0; students1[i] != NULL; i++) //循环

{

if (strcmp(students1[i],name) == 0) //如果students1[i]和name相同

{

found = 1; //found = 1

break;

}

}

if (found) //如果found = 1

{

printf("student %s already in the class list\n",name); //显示这句话

return;

}

/* so it is not in the class list yet */

students1 = (char**) realloc((void*)students1,(i+2)*sizeof(char*)); //重新分配地址

if (students1 == NULL) //分配地址失败发出警告

merror(6);

if ((students1[i] = (char*) malloc(strlen(name)+1)) == NULL) //申请内存空间失败发出警告

merror(7);

strcpy(students1[i],name); //将name复制到students1[i]中

students1[i+1] = NULL; //定义students1[i+1]为空

free((void*) name); //释放name分配的地址块

if ((marks1 = (int**) realloc((void*)marks1,sizeof(int*)*(i+2))) == NULL) //重新分配地址失败发出警告

merror(8);

if ((marks1[i] = (int*) malloc(5*sizeof(int))) == NULL) //申请内存空间失败发出警告

merror(9);

marks1[i][0]=marks1[i][1]=marks1[i][2]=marks1[i][3]=marks1[i][4]=NULL;

marks1[i+1] = NULL; //定义marks1[i+1]为空

SortClass(students1,marks1); //调用SortClass函数

*students = students1; //将students1赋值给指针变量students

*marks = marks1; //将marks1赋值指针变量marks

}

删除函数

void DeleteStudent(char*** students,int*** marks)

{int found, i; //定义变量

char** students1; //定义二级指针

int** marks1;

students1 = *students;

marks1 = *marks;

char *name;

printf("Enter Student Name to be deleted from Class List:\n");

fflush(stdout); //清除缓存区

name = ReadLine();

for(found = i = 0; students1[i] != NULL; i++) //循环

{ if (strcmp(students1[i],name) == 0) //如果students1[i]和name相同

{

found = 1; //found = 1

break;

}

}

if (found)

{

for(;students1[i] != NULL; i++)

students1[i]=students1[i+1]; //用students[i+1]来覆盖students[i]

students1[i-1]=NULL;

free((void*) students1[i]); //释放students[i]的地址块

for(;marks1[i] != NULL; i++)

marks1[i]=marks1[i+1]; //用marks[i+1]来覆盖marks[i]

marks1[i-1]=NULL;

free((void*) marks1[i]); //释放marks[i]的地址块

printf("student %s has been deleted!\n",name);

}

else

printf("student %s is not in the class list!\n",name);

free((void*) name);

*students = students1;

*marks = marks1;

}

排序函数

void SortClass(char** students,int** marks)

{

int i, j,k=0; //定义变量found, i, j, size

char *a; //定义指针a作为学生姓名排序的中间过渡

int *b; //定义指针b作为学生成绩排序的中间过渡

for(i=0;students[i]!=NULL;i++) //统计总人数

{

k++;

}

for(j=0;j<k;j++) //开始排序

{

for(i=k-1;i>=j;i--){

if(i<1)return;

if(strcmp(students[i],students[i-1])<0) //比较两个学生首字母的大小

{

a=students[i];

students[i]=students[i-1];

students[i-1]=a;

b=marks[i];

marks[i]=marks[i-1];

marks[i-1]=b;

}

}

}

free((void *)a); //释放指针a

free((void *)b); //释放指针b

}

}

显示函数

void ShowClass(char** students,int** marks)

{

int i; //定义变量found, i, j, size

fflush(stdout);

printf("Class List:\n"); //显示这句话

for(i=0;students[i] != NULL; i++) //循环

printf("%s:%d %d %d %d %d\n",students[i],marks[i][0],marks[i][1],marks[i][2],marks[i][3],marks[i][4]); //输出学生信息

}

编辑函数

void EditMarks(char** students,int** marks)

{

int found, i, j,k=0; //定义变量

char *name; //定义char型变量name

printf("Enter Student Name whose marks are to be edited:\n"); //显示这句话

name = ReadLine(); //将读取到的字符赋值给name

for(found = i = 0; students[i] != NULL; i++) //循环

{

if (strcmp(students[i],name) == 0) //如果students1[i]和name相同

{

found = 1; //found = 1

break;

}

}

if(found)

{

printf("editing %s\n",students[i]); //输入学生信息

for(j=0;j<5;j++)

{begin:

printf("if editing the %d st mark:\n",j+1);

printf("put 1 to editing,0 not change:",k); //输入进行修改跳到下一门成绩

scanf("%d",&k);

if(k==1)

{

retry:

printf("type the new mark:\n",marks[i][j]);

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

if(marks[i][j]<0||marks[i][j]>100) //如果输入的成绩小于或大于

{

printf("error\n");

goto retry; //跳转到retury标志的语句

}

}

else

if(k!=0) //如果输入数字不为或则发出警告并跳转到begin标志的语句

{

printf("error\n");

goto begin;

}

}return;

}

else

printf("student %s is not in the class list!\n",name);

}

四、程序调试

程序编辑的过程中,我发现我对二级指针一点都不了解,就上网去查了一些关于二级指针方面的资料。通过网上的了解,我发现用二维数组能够解决二级指针的问题,所以我就用二维数组进行编程。在程序调试的过程中,经常发现自己会放一些比较低级的错误,通过Microsoft Visual Studio 2008自带的调试工具,基本能够解决面临的问题,还有一些不太了解的东西也通过同学和上网查资料有了一个大概的了解。虽然没有弄懂二级指针的工作方式,但也算发现了一种不用二级指针就能解决二级指针的方法。

通过翻看以前C语言的书本,基本上也没出什么太大的问题。

五、总结

在这次编程实习中,我发现自身存在着比较大的不足:平时不好好学习,在最后要编程的时候不得不去网上查找资料了解一些基本函数的功能和使用方法。虽然这次实习没有明白多重指针的使用方法,但也找到了能替代的方式虽然这有点取巧的意思,但也算是实现了这个程序想要实现的功能。

同时,这次的编程实习也让我对编程的过程与调试过程有了一定程度上的了解,在以后的时间里,我相信我会越来越多的接触到编程,这次实习算是在为我以后的道路打下了一定的基础,希望以后能越来越熟练的掌握编程这门作为工科生必须掌握的技术。

这次编程实习的过程虽然大部分是在寝室里完成的,但在3教的机房里,我还是查找了很多相关的资料,以期望能将程序编的更完美。这次的程序中还是有不少的漏洞可以钻的,但由于对C语言还不是很了解,没能进行完善。希望以后的时间里能做到尽量把程序做到没什么漏洞。

注:1、在实习答辩结束后,由各班长收齐、按学号顺序整理后交至实II南310席旭刚老师;

2、不交实习报告者,本次实习成绩将视作不及格!

 

第二篇:程序设计综合实习报告

 安徽工业大学计算机学院

程序设计综合实习报告

题目:用C语言制作学生选课系统

姓名:

学号:

学院:计算机学院

班级:

指导老师:

完成日期:20**年5月1日

课程设计任务书

标题:用C语言制作一个学生选课系统

课程设计内容介绍:用学过的知识和查找相关知识编译学生选课系统这个程序, 方便学生选课,快速获得选课信息和选课情况等等

一、 可行性研究报告

1. 项目由来

2. 可选方案

3. 可行性

4. 结论

二、 需求规格说明

1. 目标

2. 空能需求

3. 数据需求

三、 总体设计

1.软件结构(软件结构图)

四、 详细设计

1.各模板算法、流程图

五、 程序源代码

六、 程序测试

1. 测试内容和结果表+运行效果抓图

2. 测试分析

七、 总结

1. 项目评价

2. 不足之处

一、可行性研究报告

项目由来:学生选课如果是书面选的话,由于人数多的问题会非常复杂,所以编译一个选课系统会方便学生选课,快速获得学生选课信息和选课情况。

可行方案:在实现过程中,应用到了各种函数和语句来编写,在c++环境下编译成功。

可行性:本程序只利用了简单的语法和算法,利用C语言编译工具就能编译成功。

结论:本系统可以马上开始实施,并尽可能的用最简单的方法得到。所以在实施过程中将利用最简单的方法得对最满意的结果。

二、需求规格说明

1.目标

本文主要描述学生选课系统应用程序的软件要求,目的是为了清晰地描述用户使用本软件必须要完成的任务和定义开发人员实现的软件功能,使用户利用程序能够完成他们的任务。

3. 功能需求

实现过程中,应用到了各种函数和语句来编写

4.数据需求

在数据结构方面,我们尽量使用简单的数据结构,但同样能得到满意的结果,这样能够使程序执行更稳定、高效。

三、总体设计

程序设计综合实习报告

四、程序源代码

#include<stdio.h>

#include<stdlib.h>

int N1,N2,kk1,kk2,kk3;

struct couse * head1;

struct student * head2;

struct couse//课程信息结构体

{

int num1;

char name1[20];

int score;

int nelepeo;//课程已选人数

int Melepeo;//课程人数上限

struct couse * next;

};

struct student//学生信息结构体

{

int num2;

char name2[20];

int nelenum[50];//已选课程编号

int nelen;//已选课程数量

struct student * next;

};

void Ms()

{

for(kk1=0;kk1<1100;kk1++)

for(kk2=0;kk2<1200;kk2++)

for(kk3=0;kk3<1200;kk3++);

}

void keyboardc()//录入课程子函数(从键盘录入)

{

struct couse *p1,*p2;

N1=0;

p1=p2=(struct couse*)malloc(sizeof(struct couse));

printf("课程编号\t课程名称\t学分\t课程人数上限\n");

scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);

p1->nelepeo=0;

head1=NULL;

while(p1->num1!=0)

{

N1=N1+1;

if(N1==1)head1=p1;

else p2->next=p1;

p2=p1;

p1=(struct couse * )malloc(sizeof(struct couse));

scanf("%d%s%d%d",&p1->num1,p1->name1,&p1->score,&p1->Melepeo);

p1->nelepeo=0;

}

p2->next=NULL;

}

void filec()//录入键盘子函数(从文件录入)

{

FILE * fp;

char filepath[20];

struct couse *p1,*p2;

N1=0;

printf("输入要读入的文件路径:");

getchar();

gets(filepath);

if((fp=fopen(filepath,"r"))==NULL)

{

printf("找不到%s文件!\n",filepath);

exit(0);

}

p1=p2=(struct couse*)malloc(sizeof(struct couse));

fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);

head1=NULL;

while(!feof(fp))

{

N1=N1+1;

if(N1==1)head1=p1;

else p2->next=p1;

p2=p1;

p1=(struct couse * )malloc(sizeof(struct couse));

fscanf(fp,"%d%s%d%d%d",&p1->num1,p1->name1,&p1->score,&p1->nelepeo,&p1->Melepeo);

}

p2->next=NULL;

}

void inputc()//录入课程主函数

{

int i;

printf("\t\t\t录入课程信息\n");

printf("\n1.从键盘录入\n");

printf("2.从文件录入\n");

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

printf("请选择(1~3):\n");

scanf("%d",&i);

switch(i)

{

case(1):keyboardc();break;

case(2):filec();break;

case(3):break;

}

}

void insertc(struct couse *incouse)//课程管理子函数(增加课程)

{

struct couse *p0,*p1,*p2;

p1=head1;

p0=incouse;

if(head1==NULL)

{

head1=p0;

p0->next=NULL;

}

else

{

while((p0->num1 > p1->num1) && (p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num1 <= p1->num1)

{

if(head1==p1) head1=p0;

else p2->next=p0;

p0->next=p1;

}

else

{

p1->next=p0;

p0->next=NULL;

}

}

N1=N1+1;

}

void delc(int num1)//课程管理子函数(删除课程)

{

struct couse *p1,*p2;

if(head1==NULL)

{

printf("\n没有课程,无法删除!\n");

goto end;

}

p1=head1;

while(num1!=p1->num1 && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num1==p1->num1)

{

if(p1==head1) head1=p1->next;

else p2->next=p1->next;

printf("已删除该编号课程!\n");

N1=N1-1;

}

else printf("无该编号的课程!\n");

end:;

}

void managementc()//课程管理主函数

{

struct couse * incouse;

int i,num1;

printf("\t\t\t课程管理\n");

printf("1.新增课程\n");

printf("2.删除课程\n");

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

printf("请选择(1~3):\n");

scanf("%d",&i);

switch(i)

{

case(1):

{

incouse=(struct couse *)malloc(sizeof(struct couse));

printf("课程编号\t课程名称\t学分\t课程人数上限\n");

scanf("%d%s%d%d",&incouse->num1,incouse->name1,&incouse->score,&incouse->Melepeo);

incouse->nelepeo=0;

insertc(incouse);

break;

}

case(2):

{

printf("请输入要删除课程的编号:\n");

scanf("%d",&num1);

delc(num1);

break;

}

case(3):break;

}

}

void keyboards()//录入学生信息子函数(从键盘录入)

{

int i;

struct student *p1,*p2;

N2=0;

p1=p2=(struct student *)malloc(sizeof(struct student));

printf("学生学号\t学生姓名\n");

scanf("%d%s",&p1->num2,p1->name2);

p1->nelen=0;

for(i=0;i<20;i++) p1->nelenum[i]=0;

head2=NULL;

while(p1->num2!=0)

{

N2=N2+1;

if(N2==1)head2=p1;

else p2->next=p1;

p2=p1;

p1=(struct student * )malloc(sizeof(struct student));

scanf("%d%s",&p1->num2,p1->name2);

p1->nelen=0;

for(i=0;i<20;i++) p1->nelenum[i]=0;

}

p2->next=NULL;

}

void files()//录入学生信息子函数(从文件录入)

{

int i=0;

FILE * fp;

char filepath[20];

struct student *p1,*p2;

N2=0;

printf("输入要读入的文件路径:");

getchar();

gets(filepath);

if((fp=fopen(filepath,"r"))==NULL)

{

printf("找不到%s文件!\n",filepath);

exit(0);

}

p1=p2=(struct student*)malloc(sizeof(struct student));

fread(p1,sizeof(struct student),1,fp);

head2=NULL;

while(!feof(fp))

{

i=0;

N2=N2+1;

if(N2==1)head2=p1;

else p2->next=p1;

p2=p1;

p1=(struct student * )malloc(sizeof(struct student));

fread(p1,sizeof(struct student),1,fp);

}

p2->next=NULL;

}

void inputs()//录入学生信息主函数

{

int i;

printf("\t\t\t录入学生信息\n");

printf("\n1.从键盘录入\n");

printf("2.从文件录入\n");

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

printf("请选择(1~3):\n");

scanf("%d",&i);

switch(i)

{

case(1):keyboards();break;

case(2):files();break;

case(3):break;

}

}

void inserts(struct student * incouse)//学生信息管理子函数(填加学生信息)

{

struct student *p0,*p1,*p2;

p1=head2;

p0=incouse;

if(head2==NULL)

{

head2=p0;

p0->next=NULL;

}

else

{

while((p0->num2 > p1->num2) && (p1->next!=NULL))

{

p2=p1;

p1=p1->next;

}

if(p0->num2 <= p1->num2)

{

if(head2==p1) head2=p0;

else p2->next=p0;

p0->next=p1;

}

else

{

p1->next=p0;

p0->next=NULL;

}

}

N2=N2+1;

}

void dels(int num2)//学生信息管理子函数(删除学生信息)

{

struct student *p1,*p2;

if(head2==NULL)

{

printf("\n没有该学生信息,无法删除!\n");

goto end;

}

p1=head2;

while(num2!=p1->num2 && p1->next!=NULL)

{

p2=p1;

p1=p1->next;

}

if(num2==p1->num2)

{

if(p1==head2) head2=p1->next;

else p2->next=p1->next;

printf("已删除该学生信息!\n");

N2=N2-1;

}

else printf("无该学号的学生!\n");

end:;

}

void managements()//学生信息管理主函数

{

struct student * incouse;

int i,num2;

printf("\t\t\t学生信息管理\n");

printf("1.新增学生信息\n");

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

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

printf("请选择(1~3):\n");

scanf("%d",&i);

switch(i)

{

case(1):

{

incouse=(struct student *)malloc(sizeof(struct student));

incouse->nelen=0;

incouse->nelenum[0]=0;

printf("学生学号\t学生姓名\n");

scanf("%d%s",&incouse->num2,incouse->name2);

inserts(incouse);

break;

}

case(2):

{

printf("请输入要删除学生的学号:\n");

scanf("%d",&num2);

dels(num2);

break;

}

case(3):break;

}

}

void elect(struct student * s)//选课

{

struct couse * p;

int num1,i;

printf("请输入要选课的编号:\n");

scanf("%d",&num1);

for(i=0;s->nelenum[i]!=0;i++);

s->nelenum[i]=num1;

(s->nelen)++;

p=head1;

while(p->num1!=num1) p=p->next;

(p->nelepeo)++;

}

void cheak()//学生选课子函数(查询可选课程)

{

char e;

struct couse * c;

struct student * s;

int num2,i,j=0,t=0;

printf("请输入你的学号:");

scanf("%d",&num2);

s=head2;

while(s->num2!=num2 && s->next!=NULL) s=s->next;

if(s->num2!=num2)

{

printf("不存在你的信息,请进入主菜单录入你的信息!\n");

goto end;

}

c=head1;

printf("你的可选课程编号:\n");

while(c!=NULL)

{

for(t=0,i=0;s->nelenum[i]!=0;i++)

{

if(c->num1==s->nelenum[i]) t=1;

}

if(t==0 && (c->nelepeo!=c->Melepeo))

{

printf("%d\n",c->num1);

j++;

}

c=c->next;

}

if(j==0)

{

printf("你已选完所有课程,无法再多选!\n");

goto end;

}

printf("选课(y/n)?:\n");

getchar();

e=getchar();

i=0;

while(e=='y')

{

elect(s);

printf("继续选课(y/n)?:\n");

getchar();

e=getchar();

}

end:;

}

void back(struct student * p)//退课

{

struct couse * p1;

int num1,i,j;

printf("请输入你要退掉的课程编号:\n");

scanf("%d",&num1);

p1=head1;

while(p1->num1!=num1) p1=p1->next;

for(i=0;p->nelenum[i]!=num1;i++);

for(j=i;p->nelenum[j]!=0;j++) p->nelenum[j]=p->nelenum[j+1];

p->nelenum[--j]=0;

(p1->nelepeo)--;

printf("退课成功!\n");

}

void hcheak()//学生选课子函数(查询已选课程)

{

char c;

struct couse * p0;

struct student * p;

int num2,i,f=0;

printf("请输入学号:\n");

scanf("%d",&num2);

p=head2;

while(p->num2!=num2 && p!=NULL) p=p->next;

if(p==NULL)

{

printf("不存在你的信息,请回主菜单录入信息:\n");

goto end;

}

printf("已选课程编号:\n");

if(p->nelenum[0]==0)

{

printf("你还没选课!\n");

goto end;

}

for(i=0;p->nelenum[i]!=0;i++)

{

printf("%d\n",p->nelenum[i]);

p0=head1;

while(p0->num1!=p->nelenum[i]) p0=p0->next;

f=f+p0->score;

}

printf("总学分:%d\n",f);

printf("匙否进行退课(y/n)?");

getchar();

c=getchar();

while(c=='y')

{

back(p);

printf("继续退课(y/n)?");

getchar();

c=getchar();

(p->nelen)--;

}

end:;

}

void elective()//学生选课主函数

{

int i;

printf("\t\t\t学生选课\n");

printf("1.查询可选课程\n");

printf("2.查询已选课程\n");

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

printf("请输入(1~3):\n");

scanf("%d",&i);

switch(i)

{

case(1):cheak();break;

case(2):hcheak();break;

case(3):break;

}

}

void listc()//输出课程信息

{

struct couse * p;

p=head1;

printf("课程编号 课程名称 学分 课程已选人数 课程人数上限\n");

while(p!=NULL)

{

printf("%-8d%10s%6d%8d%12d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);

p=p->next;

}

}

void lists()//输出学生信息

{

struct student * p;

p=head2;

printf("学生学号 学生姓名 已选课程数量\n");

while(p!=NULL)

{

printf("%-4d %10s %6d\n",p->num2,p->name2,p->nelen);

p=p->next;

}

}

void intoc()//存储课程信息

{

FILE * fp;

struct couse * p;

char filepath[30];

printf("输入课程信息要保存的文件路径:");

getchar();

gets(filepath);

if((fp=fopen(filepath,"w"))==NULL)

{

printf("\n保存失败!");

exit(0);

}

p=head1;

while(p!=NULL)

{

fprintf(fp,"%d %s %d %d %d\n",p->num1,p->name1,p->score,p->nelepeo,p->Melepeo);

p=p->next;

}

fclose(fp);

printf("课程信息已保存在%s中!\n",filepath);

}

void intos()//存储学生信息

{

FILE * fp;

struct student * p;

char filepath[30];

printf("输入学生信息要保存的文件路径:");

getchar();

gets(filepath);

if((fp=fopen(filepath,"w"))==NULL)

{

printf("\n保存失败!");

exit(0);

}

p=head2;

while(p!=NULL)

{

fwrite(p,sizeof(struct student),1,fp);

p=p->next;

}

fclose(fp);

printf("学生信息已保存在%s中!\n",filepath);

}

void into()//存储信息

{

int i;

printf("1.存储课程信息\n");

printf("2.存储学生信息\n");

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

printf("请输入(1~3)\n");

scanf("%d",&i);

switch(i)

{

case(1):intoc();break;

case(2):intos();break;

case(3):break;

}

}

void store()//信息主函数

{

int i;

printf("\t\t系统信息查看及存储\n");

printf("1.查看课程信息\n");

printf("2.查看学生信息\n");

printf("3.存储信息\n");

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

printf("请输入(1~4):\n");

scanf("%d",&i);

switch(i)

{

case(1):listc();break;

case(2):lists();break;

case(3):into();break;

case(4):break;

}

}

int main()//主函数

{

int i;

start:

printf("\n\t\t\t欢迎使用学生选课系统!\n");

printf("菜单:\n");

printf("1.录入课程信息\n");

printf("2.课程管理\n");

printf("3.录入学生信息\n");

printf("4.学生信息管理\n");

printf("5.学生选课\n");

printf("6.系统信息查看及存储\n");

printf("7.退出系统\n");

printf("\n请输入菜单选项(1~7):\n");

scanf("%d",&i);

if(i<1 || i>7)

{

printf("输入错误,请重输:\n");

goto start;

}

switch(i)

{

case(1):

{

system("cls");

inputc();

goto start;

break;

}

case(2):

{

system("cls");

managementc();

goto start;

break;

}

case(3):

{

system("cls");

inputs();

goto start;

break;

}

case(4):

{

system("cls");

managements();

goto start;

break;

}

case(5):

{

system("cls");

elective();

goto start;

break;

}

case(6):

{

system("cls");

store();

goto start;

break;

}

case(7):

{

system("cls");

printf("感谢使用汪志阳制作的本系统!\n\n再见!\n");

}

}

return(0);

}

五、程序测试

I.      随机数生成问题

1. 定义的函数过多导致程序难懂,加强了编译的难度。

2. 编译时存储信息仍有一定的问题。

3. 输入多人的个人信息和选课信息时的空格键输入过多。

II.  随机数重复问题

输入多人的个人信息和选课信息时的空格键输入过多。

六、总结

1、设计优点:并未涉及到复杂函数,所用的全部是基本的简单函数,简单实用。

2、设计不足:本程序仅能输出字符,无图形界面,输入的空格键也比较多。

由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。总而言之,要想编好一个程序就得不断去尝试,在失败中寻找经验和不足,然后加以改正,这样才能将程序编译得越来越好,越来越精辟。

相关推荐