程序设计

来源:互联网 发布:淘宝客服部管理制度 编辑:程序博客网 时间:2024/04/28 06:21

一、实习目的

通过模拟实习,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。信管07级学生的模拟实习主要是复杂程序和简单软件的实现。通过该模拟实习,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。

二、实习环境

计算机硬件配置:cpu 内存

硬盘操作系统:windows xp

开发环境:visual c++ 6.0

三、实习内容

内容一:运动会分数统计

任务:参加运动会有n个学校,学校编号为1……n。比赛分成m个男子项目,和w个女子项目。项目编号为男子1……m,女子m+1……m+w。不同的项目取前五名或前三名积分;取前五名的积分分别为:75321,前三名的积分分别为:532;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20

功能要求:

1)可以输入各个项目的前三名或前五名的成绩;

2)能统计各学校总分;

3)可以按学校编号、学校总分、男女团体总分排序输出;

4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名的学校。

规定:输入数据形式和范围:20以内的整数(如果做得更好可以输入学校的名称,运动项目的名称)

输出形式:有中文提示,各学校分数为整形

界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关的功能要求。

存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据要存储在数据文件中。(数据文件的数据读写方法等相关内容在c语言程序设计的书上,请自学解决)请在最后的上交资料中指明你用到的存储结构;
测试数据:要求使用1、全部合法数据;2、整体非法数据;3、局部非法数据。进行程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明;

 

内容二:纸牌游戏

任务:编号为1-52张牌,正面向上,从第2张开始,以2为基数,是2的倍数的牌翻一次,直到最后一张牌;然后,从第3张开始,以3为基数,是3的倍数的牌翻一次,直到最后一张牌;然后从第4张开始,以4为基数,是4的倍数的牌翻一次, 直到最后一张牌;...再依次5的倍数的牌翻一次,6的,7的直到 以52为基数的 翻过,输出:这时正面向上的牌有哪些?

 

内容三:设计学生成绩管理系统。该系统中存储学生的学号、姓名、性别、年龄、课程成绩等信息。

要求:(1)浏览学生信息

2)添加学生信息

3)删除学生信息

4)查找学生信息

5)修改学生信息

6)对成绩的处理

①求出每个学生各门课程的总成绩、平均成绩、最高分和最低分。

②求出某一门课程所有学生总成绩、平均成绩、最高分和最低分。

7)按照学生某门课程的成绩对学生排序

 

四、算法分析、设计与描述

1.算法分析和设计

内容一:

运动会分数统计是对运动会信息的基本管理与统计,它包括:运动会信息的输入、运动会总体成绩的查询、指定学校成绩的查询、以及各种要求的排列。

使用模块化编程的方法每项功能有一个函数来完成,对应如下:

按学校编号排序void bianhao( )     按学校总分排序void zongfen( )

按学校男总分排序void malezf( )    按学校女总分排序void femalezf( )

查询某个学校成绩void cxsch( )     查询某个项目成绩void cxxm( )

为了把数据封装起来更方便使用,创建了表示项目结构体的struct item和表示学校的结构体struct school

struct item

{

  char name[15];

  int snum[5]; 

  int s;

}p[21];

 

struct school

{

  int num;

  char name[15]; 

  int score; 

  int mscore; 

  int wscore; 

}sch[21];

 

内容二:

此题算法比较简单,按题目要求相当于从第一张牌算起,若这张牌是二的倍数,则翻面,是三的倍数则再翻一次,是四的倍数则再翻一次,循环直到52为止,则此张牌结算完成。翻完第一张牌后,再继续算第二张牌,直到52张牌都结算完成。

 

内容三:

学生信息管理系统是对学生信息的基本管理,它包括:浏览学生信息、添加学生信息、删除学生信息、查找学生信息、修改学生信息、对成绩的处理、按照学生某门课程的成绩对学生排序

使用模块化编程的方法每项功能有一个函数来完成,对应如下:

1)浏览学生信息以及读取数据  void print(ID *head)   

2)添加学生信息以及对成绩的处理ID *insert(ID *head)

3)删除学生信息 ID *delet(ID *head)    

4)查找学生信息ID *search(ID *head)     

5)修改信息  ID *amend(ID *head)

6)按照学生某门课程的成绩对学生排序ID *sort(ID *head)

7)存储数据以及退出系统ID *breaksys(ID *head)

为了把数据封装起来更方便使用,创建了表示学生信息的结构体struct id

struct id

{

  char name[20];

  int num;

  int a;

  int b;

  int c;

  double ave;

  ID *next; 

};

 

2.算法描述

内容一:

4.1 计分系统总体模块流程图

 

4.2 数据输入保存流程图

4.3按编号排列流程图

 

内容二:

4.4 流程图

 

内容三:

4.5总体模块流程图

 

4.6 删除数据流程图

 

五、程序设计

1.程序设计的基本思路

内容一:

1)主函数的程序设计

首先输入运动会成绩,进入菜单,然后选择操作(运用swith语句),调用各子函数,同时保存文件。最后选择退出程序。

2)各子函数的程序设计

保存信息:

fp=fopen("运动会分数统计.txt","wb");

  fprintf(fp,"编号 学校名称 总分 男子总分 女子总分/n");

  for(i=1;i<=n;i++)

  {

         fprintf(fp,"  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name,sch[i].score, sch[i].mscore,sch[i].wscore);

  }

  fclose(fp);

 

按学校编号排序

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

  {

         for(j=i;j<n;j++)

                if(sch[i].num>sch[j].num)

                {

                       t=sch[i];sch[i]=sch[j];sch[j]=t;

                }

  }

 

按学校总分排序

for(i=1;i<n;i++)

  {

         for(j=i;j<=n;j++)

                if(sch[i].score<sch[j].score)

                {

                       t=sch[i];

                       sch[i]=sch[j];

                       sch[j]=t;

                }

  }

 

按学校男总分排序

school t;

  for(i=1;i<n;i++)

  {

         for(j=i;j<=n;j++)

                {

if(sch[i].mscore<sch[j].mscore)

                     {

                           t=sch[i];sch[i]=sch[j];sch[j]=t;

                     }

          }

  }

 

按学校女总分排序

for(i=1;i<n;i++)

  {

         for(j=i;j<=n;j++)

                if(sch[i].wscore<sch[j].wscore)

                {

                       t=sch[i];sch[i]=sch[j];sch[j]=t;

                }

  }

 

查询某个学校成绩

for(i=1;i<=n;i++)

  {

         if(sch[i].num==s)

         {

                       printf("  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name, sch[i].score,sch[i].mscore,sch[i].wscore); 

                break;

         }

  }

 

查询某个项目成绩

for(i=1;i<=5;i++)

         printf("   %d%6d%10s/n",i,p[s].snum[i],sch[ p[s].snum[i] ].name);

  printf("/n");

 

内容二:

主要算法是两次for循环

for(i=1;i<=52;i++)

  {

         a=1;

         for(j=2;j<=52;j++)

         {

                if(i%j==0)

                       a=-a;

         }

         if(a==1)

                printf("%d/n",i);

  }

 

内容三:

1)主函数的程序设计

首先,进入菜单,然后选择操作(运用swith语句),调用各子函数,调用完后自动返回主菜单。在退出程序时自动保存文件。

2)各子函数的程序设计

显示信息:

fp=fopen("学生成绩管理.txt","a+");

  printf("显示结果是:/n");

  printf("学号 姓名 性别 年龄 语文 数学 英语 总成绩 平均成绩 最高分 最低分/n");

  while(p!=NULL)

  {

         fscanf(fp,"%3d%5s%5s%5d%5d%5d%5d%5d%5d%5d%5d/n",&p->num, &p->name,&p->sex, &p->age,&p->a,&p->b,&p->c,&p->sum,&p->ave,&p->max, &p->min);

         p++;

  }

  fclose(fp);

  if(head!=NULL)

  {

         do

         {

                printf("%3d%5s%5s%5d%5d%5d%5d%6d%9.2f%7d%7d/n",p->num, p->name,p->sex, p->age,p->a,p->b,p->c,p->sum,p->ave,p->max,p->min);

                p=p->next;

         }

         while(p!=NULL);

  }

  printf("总体成绩:/n");

  printf("语文的总成绩是%4d/t平均成绩是%5.2f/t最高分是%3d/t最低分是%3d/n",asum,aave,amax,amin);

  printf("数学的总成绩是%4d/t平均成绩是%5.2f/t最高分是%3d/t最低分是%3d/n",bsum,bave,bmax,bmin);

  printf("英语的总成绩是%4d/t平均成绩是%5.2f/t最高分是%3d/t最低分是%3d/n",csum,cave,cmax,cmin);

 

添加记录

printf("插入操作开始!!!/n");

  temp=(ID *)malloc(sizeof(ID));

  printf("请输入学生的学号:/n");scanf("%d",&temp->num);

  printf("请输入学生的姓名:/n");scanf("%s",&temp->name);

  printf("请输入学生的性别:/n");scanf("%s",&temp->sex);

  printf("请输入学生的年龄:/n");scanf("%d",&temp->age);

  printf("请输入学生的语文成绩:/n");scanf("%d",&temp->a);

  printf("请输入学生的数学成绩:/n");scanf("%d",&temp->b);

  printf("请输入学生的英语成绩:/n");scanf("%d",&temp->c);

 

查找记录

查找记录中需要看记录中是否有与输入数据匹配的数据。有则输出数据,没有则提示没有找到数据。

while(str!=p1->num && p1!=NULL)

  {

         p2=p1;

         p1=p1->next;

  }

 

保存记录

fp=fopen("学生成绩管理.txt","a+");

     fprintf(fp,"学号  姓名  性别  年龄  语文  数学  英语  总成绩  平均成绩  最高分  最低分/n");

     while(p->next!=NULL)

     {

            fprintf(fp,"%3d%5s%5s%5d%5d%5d%5d%5d%5d%5d%5d/n", p->num,p->name,p->sex, p->age,p->a,p->b,p->c,p->sum,p->ave,p->max, p->min);

            p++;

     }

     fclose(fp);

 

2.程序代码

内容一:

#include<stdio.h>

#include <stdlib.h>

int n,m,w;

FILE *fp;

struct item

{

     char name[15];

     int snum[5]; 

     int s;

}p[21];

struct school

{

     int num;

     char name[15]; 

     int score; 

     int mscore; 

     int wscore; 

}sch[21];

int integral1[5]={7,5,3,2,1};//前五名得分

int integral2[3]={5,3,2};//前三名得分

void input()

{

     int i,j=0,y,x;

     printf("请输入学校个数:");

     while(1)

     {

            scanf("%d",&n);

            if(n>=1&&n<=20)y=1;

            if(y)break;

            else printf("输入错误,请重新输入:/n");

     }

     for(i=1;i<=n;i++)

     {

            printf("请输入第%d个学校的名称:",i);

            scanf("%s",&sch[i].name);

            sch[i].score=0;

            sch[i].wscore=0;

            sch[i].mscore=0;

            sch[i].num=i;

     }

     printf("请输入男子项目数和女子项目数:/n");

     y=0;

     while(1)

     {

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

            if(m<=20&&m>=1&&w<=20&&w>=1)y=1;

            if(y)break;

            else printf("输入错误,请重新输入:/n");

     }

     for(i=1;i<=m+w;i++)

     {

            printf("请输入第%d个项目的名称:",i);

            scanf("%s",& p[i].name);

            while(1)

            {

                   printf("请输入第%d个项目选取的名次:",i);

                   scanf("%d",& p[i].s);

                   if(p[i].s==3||p[i].s==5)break;

                   else printf("输入错误,请重新输入:/n");

            }

            printf("请输入第%d个项目的前%d名的学校编号:/n",i,p[i].s);

            if(p[i].s==5)

            {

                   for(j=1;j<=5&&j<=n;j++)

                   {

                          y=0;

                          while(1)

                          {

                                 scanf("%d",&x);

                                 if(x>=1&&x<=n)y=1;

                                 if(y)break;

                                 else printf("输入错误,请重新输入:/n");

                          }

                          p[i].snum[j]=x;

                          sch[x].score+=integral1[j-1];

                          if(i<=m)sch[x].mscore+=integral1[j-1];

                          else sch[x].wscore+=integral1[j-1];

                   }

            }

            else

            {

                   for(j=1;j<=5&&j<=n;j++)

                   {

                          y=0;

                          while(1)

                          {

                                 scanf("%d",&x);

                                 if(x>=1&&x<=n)y=1;

                                 if(y)break;

                                 else printf("输入错误,请重新输入:/n");

                          }

                          p[i].snum[j]=x;

                          sch[x].score+=integral2[j-1];

                          if(i<=m)sch[x].mscore+=integral2[j-1];

                          else sch[x].wscore+=integral2[j-1];

                   }

            }

     }

     fp=fopen("运动会分数统计.txt","wb");

     fprintf(fp,"编号 学校名称 总分 男子总分 女子总分/n");

     for(i=1;i<=n;i++)

     {

            fprintf(fp,"  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name,sch[i].score, sch[i].mscore,sch[i].wscore);

     }

     fclose(fp);

}

void bianhao() //按编号排序

{

     int i,j;

     school t;

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

     {

            for(j=i;j<n;j++)

                   if(sch[i].num>sch[j].num)

                   {

                          t=sch[i];sch[i]=sch[j];sch[j]=t;

                   }

     }

     printf("/n按编号排列:/n");

     printf("编号  学校名称  总分  男子总分  女子总分/n");

     for(i=1;i<=n;i++)

            printf("  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name,sch[i].score, sch[i].mscore,sch[i].wscore);

}

void zongfen() //按学校总分排序

{

     int i,j;

     school t;

     for(i=1;i<n;i++)

     {

            for(j=i;j<=n;j++)

                   if(sch[i].score<sch[j].score)

                   {

                          t=sch[i];

                          sch[i]=sch[j];

                          sch[j]=t;

                   }

     }

     printf("/n按学校总分排列:/n");

     printf("编号  学校名称  总分  男子总分  女子总分/n");

     for(i=1;i<=n;i++)

                   printf("  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name,sch[i].score, sch[i].mscore,sch[i].wscore);

}

 

void malezf() //按学校男总分排序

{

     int i,j;

     school t;

     for(i=1;i<n;i++)

     {

            for(j=i;j<=n;j++)

                   if(sch[i].mscore<sch[j].mscore)

                   {

                          t=sch[i];sch[i]=sch[j];sch[j]=t;

                   }

     }

     printf("/n按学校男子总分排列:/n");

printf("编号  学校名称  总分  男子总分  女子总分/n");

     for(i=1;i<=n;i++)

            printf("  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name,sch[i].score, sch[i].mscore,sch[i].wscore);

}

void femalezf() //按学校女总分排序

{

     int i,j;

     school t;

     for(i=1;i<n;i++)

     {

            for(j=i;j<=n;j++)

                   if(sch[i].wscore<sch[j].wscore)

                   {

                          t=sch[i];sch[i]=sch[j];sch[j]=t;

                   }

     }

     printf("/n按学校女子总分排列:/n");

     printf("编号  学校名称  总分  男子总分  女子总分/n");

     for(i=1;i<=n;i++)

                   printf("  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name,sch[i].score, sch[i].mscore,sch[i].wscore);

     printf("/n");

}

void cxsch() //查询某个学校成绩

{

     int i,y,s;

     printf("输入需要查询的学校编号:");

     y=0;

     while(1)

     {

            scanf("%d",&s);

            if(s>=1&&s<=n)y=1;

            if(y)break;

            else printf("输入数据有误,请重新输入:");

     }

     printf("该学校相关信息:/n");

     printf("编号  学校名称  总分  男子总分  女子总分/n");

     for(i=1;i<=n;i++)

     {

            if(sch[i].num==s)

            {

                          printf("  %d%10s%7d%7d%7d/n",sch[i].num,sch[i].name, sch[i].score,sch[i].mscore,sch[i].wscore); 

                   break;

            }

     }

     printf("/n");

}

 

void cxxm() //查询某个项目成绩

{

     int i,y,s;

     printf("输入需要查询的项目编号:");

     y=0;

     while(1)

     {

            scanf("%d",&s);

            if(s>=1&&s<=n)y=1;

            if(y)break;

            else printf("输入数据有误,请重新输入:");

     }

     printf("%s5名学校编号及名称为/n",p[s].name);

     printf("名次    编号    学校名称/n");

     for(i=1;i<=5;i++)

            printf("   %d%6d%10s/n",i,p[s].snum[i],sch[ p[s].snum[i] ].name);

     printf("/n");

}

 

void main()

{

     input();

     int z;

     while(1)

     {

            printf("/n请选择:/n");

            printf("1.按学校编号排序/n/n");

            printf("2.按学校总分排序/n/n");

            printf("3.按学校男总分排序/n/n");

            printf("4.按学校女总分排序/n/n");

            printf("5.查询某个学校成绩/n/n");

            printf("6.查询某个项目成绩/n/n");

            printf("7.退出/n/n");

            scanf("%d",&z);

            switch(z)

            {

            case 1: bianhao(); break;

            case 2:zongfen(); break;

            case 3:malezf(); break;

            case 4:femalezf(); break;

            case 5:cxsch(); break;

            case 6:cxxm(); break;

            case 7: exit(0); break;

            default :printf("输入错误,请重新输入!/n");

            }

     }

}

 

内容二:

#include<stdio.h>

void main()

{

     int i,j,a;

     printf("正面向上的牌有:/n");

     for(i=1;i<=52;i++)

     {

            a=1;

            for(j=2;j<=52;j++)

            {

                   if(i%j==0)

                          a=-a;

            }

            if(a==1)

            {

                   printf("%d/n",i);

            }

     }

}

 

内容三:

#include <stdio.h>

#include <stdlib.h>

#include <malloc.h>

#include <string.h>

#define ID struct id

struct id

{

     char name[20];

     int num;

     char sex[2];

     int age;

     int a;

     int b;

     int c;

     int sum;

     double ave;

     int min;

     int max;

     ID *next; 

}stu[100];

int pc=1;

FILE *fp;

int asum=0,bsum=0,csum=0;

int amax=0,bmax=0,cmax=0;

int amin=100,bmin=100,cmin=100;

float aave,bave,cave;

 

void print(ID *head)//显示记录

{

     ID *p;

     p=head;

     int temp;

     printf("显示结果是:/n");

     printf("学号 姓名 性别 年龄 语文 数学 英语 总成绩 平均成绩 最高分 最低分/n");

     if(head!=NULL)

     {

            do

            {

                   printf("%3d%5s%5s%5d%5d%5d%5d%6d%9.2f%7d%7d/n",p->num, p->name,p->sex, p->age,p->a,p->b,p->c,p->sum,p->ave,p->max,p->min);

                   p=p->next;

            }

            while(p!=NULL);

     }

     printf("总体成绩:/n");

     printf("语文的总成绩是%4d/t平均成绩是%5.2f/t最高分是%3d/t最低分是%3d/n",asum,aave,amax,amin);

     printf("数学的总成绩是%4d/t平均成绩是%5.2f/t最高分是%3d/t最低分是%3d/n",bsum,bave,bmax,bmin);

     printf("英语的总成绩是%4d/t平均成绩是%5.2f/t最高分是%3d/t最低分是%3d/n",csum,cave,cmax,cmin);

}

 

ID *insert(ID *head) //添加记录

{

     ID *sort(ID *head);

     ID *temp,*p1,*p2,*p;

     int t;

     p=head;

     printf("插入操作开始!!!/n");

     temp=(ID *)malloc(sizeof(ID));

     printf("请输入学生的学号:/n");scanf("%d",&temp->num);

     printf("请输入学生的姓名:/n");scanf("%s",&temp->name);

     printf("请输入学生的性别:/n");scanf("%s",&temp->sex);

     printf("请输入学生的年龄:/n");scanf("%d",&temp->age);

     printf("请输入学生的语文成绩:/n");scanf("%d",&temp->a);

     printf("请输入学生的数学成绩:/n");scanf("%d",&temp->b);

     printf("请输入学生的英语成绩:/n");scanf("%d",&temp->c);

     temp->sum=temp->a+temp->b+temp->c;

     temp->ave=(temp->sum)/3.0;

     temp->min=((temp->a<temp->b)?temp->a:temp->b)<temp->c?((temp->a<temp->b)?temp->a:temp->b):temp->c;

     temp->max=((temp->a>temp->b)?temp->a:temp->b)>temp->c?((temp->a>temp->b)?temp->a:temp->b):temp->c;

    

     if (head==NULL)

     {

            head=temp;

            temp->next=NULL;

     }

     else

     {

            p1=head;

            p2=p1;

            p1=p1->next;

            p2->next=temp;

            temp->next=p1;

            p=head;

            do

            {

                   asum=asum+p->a;

                   bsum=bsum+p->b;

                   csum=csum+p->c;

                   if(amin > p->a)

                   {

                          t=amin;

                          amin=p->a;

                   }

                   if(amax < p->a)

                   {

                          t=amax;

                          amax=p->a;

                   }

                   if(bmin > p->b)

                   {

                          t=bmin;

                          bmin=p->b;

                   }

                   if(bmax < p->b)

                   {

                          t=bmax;

                          bmax=p->b;

                   }

                   if(cmin > p->c)

                   {

                          t=cmin;

                          cmin=p->c;

                   }

                   if(cmax < p->c)

                   {

                          t=cmax;

                          cmax=p->c;

                   }

                   p=p->next;

            }

            while(p!=NULL);

     aave=float(asum/pc);

     bave=float(bsum/pc);

     cave=float(csum/pc);

     }

     printf("添加成功!!");

     pc++;

     return (head);

}

 

ID *search(ID *head) //查找记录

{

     ID *p1,*p2;

     int str;

     printf("请输入要查找的学生的学号:");

     scanf("%d",&str);

     p1=head;

     while(str!=p1->num && p1!=NULL)

     {

            p2=p1;

            p1=p1->next;

     }

     if(str==p1->num)

     {

            printf("学生的学号:%d/n",p1->num);

            printf("学生的姓名:%s/n",p1->name);

            printf("学生的性别:%s/n",p1->sex);

            printf("学生的年龄:%d/n",p1->age);

            printf("学生的语文成绩:%d/n",p1->a);

            printf("学生的数学成绩:%d/n",p1->b);

            printf("学生的外语成绩:%d/n",p1->c);

            printf("学生的总成绩:%d/n",p1->sum);

            printf("学生的平均成绩:%.2lf/n",p1->ave);

            printf("学生的最高分:%d/n",p1->max);

            printf("学生的最低分:%d/n",p1->min);

     }

     else

            printf("没有找到记录");

     return head;

}

 

ID *sort(ID *head)//排序

{

     int temp;

     char str[100];

     double dbl;

     ID *p1,*p2;

     for(p1=head;p1!=NULL;p1=p1->next)

     {

            for(p2=p1->next;p2!=NULL;p2=p2->next)

            {

                   if(p1->ave<p2->ave)

                   {

                          temp=p1->num;

                          p1->num=p2->num;

                          p2->num=temp;

                          strcpy(str,p1->name);

                          strcpy(p1->name,p2->name);

                          strcpy(p2->name,str);

                          temp=p1->a;

                          p1->a=p2->a;

                          p2->a=temp;

                          temp=p1->b;

                          p1->b=p2->b;

                          p2->b=temp;

                          temp=p1->c;

                          p1->c=p2->c;

                          p2->c=temp;

                          dbl=p1->ave;

                          p1->ave=p2->ave;

                          p2->ave=dbl;

                   }

            }

     }

     printf("排序成功!!!/n");

     return (head);

}

 

ID *delet(ID *head) //删除记录

{

     ID *p1,*p2;

     int num;

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

     scanf("%d",&num);

     p1=head;

     if (head==NULL)

     {

            printf("没有记录/n");

            goto end;

     }

     while(num!=p1->num && p1!=NULL)

     {

            p2=p1;

            p1=p1->next;

     }

     if(num==p1->num)

     {

            if (p1==head)

                   head=p1->next;

            else

                   p2->next=p1->next;

            printf("删除成功!!!/n");

            pc--;

     }

     else

            printf("没有这个记录");

end:return head;

}

 

ID *amend(ID *head)//修改信息

{

     ID *p;

     p=head;

     int findmess;

     if(!head)

     {

            printf("/n=====>提示:没有资料可以修改!/n");

            exit(0);

     }

     printf("请你输入要修改的学生学号:");

     scanf("%d",&findmess);

     while(findmess!=p->num)

     {

            p++;

     }

     if(p)

     {

            printf("请你输入新学号(原来是%d):",p->num);

            scanf("%d",&p->num);

            printf("请你输入新姓名(原来是%s):",p->name);

            scanf("%s",&p->name);

            getchar();

            printf("请你输入新性别(原来是%s):",p->sex);

            scanf("%s",&p->sex);

            printf("请你输入新年龄(原来是%d):",p->age);

            scanf("%d",&p->age);

            printf("请你输入新的语文成绩(原来是%d):",p->a);

            scanf("%d",&p->a);

            getchar();

            printf("请你输入新的数学成绩(原来是%d):",p->b);

            scanf("%d",&p->b);

            getchar();

            printf("请你输入新的英语成绩(原来是%d):",p->c);

            scanf("%d",&p->c);

            p->sum=(p->a+p->b+p->c);

            p->ave=p->sum/3.0;

     p->min=((p->a<p->b)?p->a:p->b)<p->c?((p->a<p->b)?p->a:p->b):p->c;

     p->max=((p->a>p->b)?p->a:p->b)>p->c?((p->a>p->b)?p->a:p->b):p->c;

            printf("/n提示:资料修改成功!/n");

            return (head);

     }

     else

     {

            printf("没有这个学号!");

     }

}

 

ID *breaksys(ID *head)

{

     ID *p;

     p=head;

     fp=fopen("学生成绩管理.txt","a+");

     fprintf(fp,"学号  姓名  性别  年龄  语文  数学  英语  总成绩  平均成绩  最高分  最低分/n");

     while(p->next!=NULL)

     {

            fprintf(fp,"%3d%5s%5s%5d%5d%5d%5d%5d%5d%5d%5d/n",p->num, p->name,p->sex, p->age,p->a,p->b,p->c,p->sum,p->ave,p->max,p->min);

            p++;

     }

     fclose(fp);

     return(head);

}

void main()

{

     ID *head=NULL;

     int choise;

     printf("/t/t* * * * * 信息管理与系统开发设计综合模拟实习 * * * * */n");

     printf("/n");

     while(1)

     {

            printf("/t/t/t       学生信息管理系统/n");

            printf("/t/t/t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/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    5 . 修 改 学 生 信 息/n"); 

            printf("/t/t/t    6 . 学 生 成 绩 排 序/n");

            printf("/t/t/t    0 . 退         /n");

            printf("/n");

            printf("/t/t/t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~/n");

            printf("请选择(0-6):");

            scanf("%d",&choise);

            switch(choise)

            {

            case 1: print(head); break;

            case 2: head=insert(head); break;

            case 3: head=delet(head); break;

            case 4: head=search(head); break;

            case 5: head=amend(head);break;

            case 6: head=sort(head); break;

            case 0: breaksys(head);exit(0); break;

            default :printf("输入错误,请重新输入!/n");

            }

     }

}

 

六、程序运行、调试和结果分析

1.程序运行中出现的问题及调试手段

在调试过程中出现了比较多的错误,也耗费了大量的时间和精力修改。

在运行程序一是出现了图6.1问题。经过检查发现问题出现在代码printf("%d%s%d%d%d",sch[i].num,sch[i].name,sch[i].score,sch[i].male,sch[i]. female)上,并且是sch[i].name出现了问题。由此发现了在结构体中name定义为string name,改为char name[15]后,程序可以正常运行。

 

6.1 应用程序错误

 

在运行程序三时,储存的文件中出现乱码,经过检查发现储存的数据的格式不对导致出现乱码。修改以后,这个问题就解决了。

2.程序运行结果分析

内容一

1)输入数据

6.2输入数据

 

 

 

2)选择操作

6.3主界面

6.4 按编号排列

6.5 按学校总分排列

6.6按学校男子总分排列

6.6按学校查询

6.7按项目查询

 

储存文件中的数据如下

 

6.8 存储的数据

 

内容二

6.9 运行结果

 

内容三

1)程序主界面

6.10 程序主界面

 

 

2)选择操作

6.11 添加学生信息

 

6.12 浏览学生信息

 

6.13 删除学生信息

 

6.14 删除3号信息后的结果

 

 

6.15 查找学生信息

 

6.16 删除学生信息

 

6.17 学生排序

 

6.18排序后的学生信息

 

6.19退出系统

 

七、实习总结

通过这次模拟实习,我的C语言编程的能力有了很大的提高,特别是在指针、数组、函数和结构体方面,还学习了课本没有讲到的知识,学会了使用模块化编程的简单方法,另外在对话框的编程要求美观、方面也有了体会。

指针是C语言的灵魂,它在本次实习也起到了非常大的作用,本次实习在使用指针过程中对指针进行了简化也是一个“亮点”,它使程序变得通俗易懂,也降低了程序的难度。以后要对这种方法进行深刻的体会。

数组在程序中有着很重要的作用,对数据的贮存、输入、读取起着很重要的作用,本程序几乎所有数据都以数组进行输入、贮存、读取方便了对数据的处理和输入,数组的的使用在本程序中有很大的好处。

函数是实现模块化编程的基础,它使程序变得方面易懂,对修改起了很大作用,也降低了编程的难度,一个函数就是一个功能,它使各个功能之间有了一定的独立性,一个函数的错误,不会导致整个程序的失败(主函数除外),对函数的良好应用时在本程序中又以深刻的体会。也有了很大提高。

结构体的使用,为本次实习提供了很大方便,同时提高了本程序的可读性,结构数组方便了对数据的管理。

文件的读取与存贮使数据可以保存下来,这也是在以前的学习过程中没有掌握的内容,在开始时遇到了不小的困难。

另外,感觉到自己能编写的程序都非常的简短,系统性也不强。我还需要在编程方面进一步提高。

从这次编程序的过程中,我学到了编程所必须具备的专业技能,更领会编译程序所需要的细心和耐心。同时也提高了自己对编程的兴趣,使自己对编程有了更深的理解,体会到编程的乐趣。

 

原创粉丝点击