第二次 改写学生系统成绩

  这次我们利用3个小时的时间学习了利用C语言编写的学生信息管理系统。进入程序,首先映入眼帘的就是管理系统的欢迎界面,界面利用printf函数设计的简单却又不适艺术美。从整个学生信息管理系统运行体验来说,它主要分了以下几步:1, 进入主界面:要求输入密码,输入三次错误系统锁定。2,输入记录:将学生的基本信息包括学号,姓名,性别,年龄,分数等数据作为一个记录写入文件。3,显示记录:显示学生的各项信息 。4,增加记录增加多个学生的基本信息,位于之前的学生后面。 5,删除记录删除学生信息。6,修改记录:可以修改学生的任何一项基本信息。7,查找记录:可以根据学生的学号查找并显示出学生的信息。 8,统计记录统计全班通过情况和不及格情况。 9,退出系统 

  这次所学习的学生管理系统经过逐层逐块、不断细化、求精过程,编写程序并进行测试、验证,可以逐个模块地分开调试,并通过文件包含或用工程文件的形式进行逐步联合调试,多次利用函数的输入与调用,一步步地完成了这个可以称之“完美”的系统。

  首先,考虑信息的录入,一个学生包括这么多的属性,应该考虑定义一个结构体。其次,应该考虑数据的存储形式,在这里用一个的是数组。从文件中录入要定义一个文件指针,打开该文件后通过一个循环来读文件,将所有信息读出来后关闭文件。对于菜单设计,首先用printf语句把程序的功能列出来,然后等待用户输入而执行不同的函数,执行完了一个功能后进入下一个步骤。信息的浏览,需要通过循环将结构体中所有元素输出就行了。信息的查询,用switch结构来解决等输入信息的时候,通过字符串比较函数,如果存在,那么输出学生信息,否则提示错误并要求重新输入。信息的修改,输入要修改信息的学号。首先用字符串比较函数判断改学生信息是否存在,如果存在,用switch语句来修改学生的信息修改信息用的是字符函数。增加新学生信息,与修改学生信息类似,输入要增加的学号。删除学生信息,通过比较找到要删除的学号,用后一个学生的信息直接赋值,后面的依次赋值给前一个学生的信息。

  这次我所完成的是对学生信息系统的修改,虽然这次仅仅修改的是一些小的部分,但是当看到自己修改后的程序运行成功时,还是感觉挺骄傲的。下面就是我修改之后的C语言程序代码:

#include"stdio.h"

#include"stdlib.h"

#include"string.h"

#include"conio.h"

#define PAGE 3

#define MAX 1000

#define N 5

int k=0;

  /*结构体类型*/

typedef struct  

{   int num;/*职工号*/

    char name[20];/*姓名*/

char sex[5];/*性别*/

int age;/*年龄*/

char department[20];/*部门*/

int score;/*年终奖*/

}STUDENTS;

 

int read_file(STUDENTS stu[])

{ FILE *fp;

    int i=0;

if((fp=fopen("stu.txt","rt"))==NULL)

{printf("\n\n*****库存文件不存在!请创");

 return 0;

}

while(feof(fp)!=1)

    {

fread(&stu[i],sizeof(STUDENTS),1,fp);

if(stu[i].num==0)

break;

else

i++;

}

fclose(fp);

return i;

}

void save_file(STUDENTS stu[],int sum)

{FILE*fp;

 int i;

 if((fp=fopen("stu.txt","wb"))==NULL)

 {printf("写文件错误!\n");

  return;

 }

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

   if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)

   printf("写文件错误!\n");

   fclose(fp);

}

 

 

/*创建职工信息*/

int input(STUDENTS stu[])

{  int i,x;

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

   {

    system("cls");  

    printf("\n\n                 录入职工信息  (最多%d)\n",MAX);

    printf("               ----------------------------\n");

   

        printf("\n                     %d个职工",k+1);

    printf("\n 请输入职工的号:");

        scanf("%d",&stu[k].num);

        printf("\n 请输入职工的姓名:");

        scanf("%s",stu[k].name);

   printf("\n 请输入职工的性别:");

        scanf("%s",stu[k].sex);

        printf("\n 请输入职工的年龄:");   

        scanf("%d",&stu[k].age);  

        printf("\n 请输入职工的部门:");

        scanf("%s",stu[k].department);        

        printf("\n 请输入职工的年终奖:");

        scanf("%d",&stu[k++].score);

        printf("\n 请按1键返回菜单或按0键继续创建");

scanf("%d",&x);

if(x)

  break;

   }

      

       return k;

}

 

 

/*删除职工信息*/

void deletel(STUDENTS stu[])

  { system("cls");

   char Stuname2[20];

   int i,j;

   printf("请输入职工姓名:");

   scanf("%s",Stuname2);

   printf("\n");

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

   if(strcmp(stu[i].name,Stuname2)==0)   

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

       stu[i].name[j]=stu[i+1].name[j];

   k--;

  

   printf("删除成功\n");

   printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   getchar();

}

 

/*打印职工信息*/                                                                                                                                                                                                                                                        

void output(STUDENTS stu[])

{  system("cls");

   int i;

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

     printf("职员号:%d,姓名:%s,性别:%s,年龄:%d,部门:%s,年终奖: %d\n",stu[i].num,stu[i].name,

  stu[i].sex,stu[i].age,stu[i].department,stu[i].score);

   printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   getchar();

}

 

/*查询职工信息*/

void inquire(STUDENTS stu[])

  { int i;

    int num;

    system("cls");

    printf("     \n\n请输入您要查找的职工的号码");

    scanf("%d",&num);

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

      if(num==stu[i].num)

         printf("\n\n\n职工号:%d,姓名:%s,性别:%s,年龄:%d,部门:%s,年终奖: %d\n",stu[i].num,stu[i].name,

 stu[i].sex,stu[i].age,stu[i].department,stu[i].score);

    printf("按任意键加回车返回主菜单!");

scanf("%d",&i);

    getchar();

  }

 

 

/*修改职工信息*/

void change(STUDENTS stu[])

  {  int num,i,choice;

     system("cls");

 printf("\n\n\n      请输入您要修改的职工号");

     scanf("%d",&num);

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

     { if(num==stu[i].num)

         printf("\n职工号:%d,姓名:%s,性别:%s,年龄:%d,部门:%s,年终奖: %d\n",stu[i].num,stu[i].name,

 stu[i].sex,stu[i].age,stu[i].department,stu[i].score);

 

     printf("\n\n\n     ********请输入您想要修改的数据********\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("                 请选择(1-6:");

  scanf("%d",&choice);

  switch(choice)

  {case 1:{

       printf("\n   请输入你改的新职工号");

           scanf("%d",&stu[i].num);

   break;

   }

   case 2:{

       printf("\n   请输入你改的新姓名");

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

   break;

  }

   case 3:{

       printf("\n   请输入你改的新性别");

           scanf("%s",stu[i].sex);

   break;

  }

   case 4:{

       printf("\n   请输入你改的新年龄");

           scanf("%d",&stu[i].age);

   break;

  }

   case 5:{

       printf("\n   请输入你改的新部门");

           scanf("%s",stu[i].department);

   break;

  }

   case 6:{

       printf("\n   请输入你改的新年终奖");

           scanf("%d",&stu[i].score);

   break;

  }

  }

 

   printf("职工号:%d,姓名:%s,性别:%s,年龄:%d,部门:%s,年终奖: %d\n",stu[i].num,stu[i].name,

 stu[i].sex,stu[i].age,stu[i].department,stu[i].score);

       printf("按任意键加回车返回主菜单!");

   scanf("%d",&i);

   break;

 }

}

 

 

/*职工年终奖信息排名*/

void sort(STUDENTS stu[])

  {  int i,j,n=1,x;

     system("dep");

     int t;

      for(i=0;i<k-1;i++)

for(j=i+1;j<k;j++)

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

{ t=stu[i].score;

  stu[i].score=stu[j].score;

  stu[j].score=t;

              t=stu[i].num;

  stu[i].num=stu[j].num;

  stu[j].num=t;

 

}

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

printf("排名    职工号    年终奖\n %d       %d       %d\n",n++,stu[i].num,stu[i].score);

     printf("按任意键加回车返回主菜单!");

 scanf("%d",&x);

     getchar();

  }

 

void pagedis()

{

   printf(" \n\n\n                   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");

   printf("                   @                                @\n");

   printf("                   @                                @\n");

   printf("                   @                                @\n");

   printf("                   @     欢迎进入职工信息管理系统   @\n");

   printf("                   @                                @\n");

   printf("                   @                                @\n");

   printf("                   @                                @\n");

   printf("                   @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\n");

   

}

void check()

{

   char userName[5];/*用户名*/

   char userPWD[5];/*密码*/

   int i,sum;

   system("color 9F");

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

   {

      /*用户名和密码均为123456;*/

    printf("   用户名和密码均为123456\n\n");

        printf("\n       请输入您的用户名:");

        gets(userName);

        

        printf("\n       请输入您的密码:");

        gets(userPWD);

        

        if ((strcmp(userName,"123456")==0) && (strcmp(userPWD,"123456")==0))/*验证用户名和密码*/

        {

            printf("用户名和密码正确,显示主菜单");

            return;

        }

        else

        {

            if (i < 3)

            {

                printf("用户名或密码错误,提示用户重新输入");

                printf("用户名或密码错误,请重新输入!");

            }

            else

            {

                printf("连续3次输错用户名或密码,退出系统。");

                printf("您已连续3次将用户名或密码输错,系统将退出!");

                exit(1);

            }

        }

   }

}

void menu()

{

  STUDENTS stu[20];

  int choice,k,sum;

  sum=read_file(stu);

  if(sum==0)

   {  printf("首先录入基本库存信息!按回车后进入*****\n");

      getch();

  sum=input(stu);

   }

  

  do

  {  system("cls");  

     printf("\n\n\n               ********职工信息管理系统********\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("                      0. 退出系统\n\n");

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

     scanf("%d",&choice);

    switch(choice)

    {

      case 1: k=input(stu); break;/*创建职工信息*/

      case 2: output( stu) ; break;/*打印职工信息*/

      case 3: inquire(stu); break;/*查询职工信息*/

      case 4: change(stu); break;/*修改职工信息*/

      case 5: deletel(stu); break;/*删除职工信息*/

      case 6: sort(stu); break;/*职工年终奖信息排名*/

      case 0: break;

    }

  }while(choice!=0);

  save_file(stu,sum);

}

int main()

{  

  int i,sum;

  pagedis();

  check();

  menu();   

}

  通过此次C语言程序课程设计,我实在是收获不凡!这学期我们学的C语言,以前就听过这个名字,打开书一看简直一窍不通,学好这门科简直就是一个挑战,课前课后都要把书啃一遍,要不然上课就跟不上,所以一开始做题,也是有点模糊,在课程的学习下,我们慢慢地完善自己的知识。这次的课设我们做的是修改学生信息管理系统,内容包括很多。运用的函数也是非常的复杂,一步一步地修改,从小处开始,不改大的部分。但是总是有很多错误出现,有好多是些小问题,这都是粗心大意造成的。由这次的改程序我充分体验到设计程序一定要仔细,不容一点的马虎。程序设计过程有如解决一实际问题,从解决实际问题的角度,我们可以这样来看:首先要了解这个问题的基本要求,即输入、输出、完成从输入到输出的要求是什么;其次,从问题的要害入手,从前到后的解决问题的每个方面,即从输入开始入手,着重考虑如何从输入导出输出,在这个过程中,可确定所需的变量、数组、函数,然后确定处理过程--算法。可得最后结论。在程序设计中,可认为也是一个社会,每个一同的社会成员都有不同的想法。程序设计学得的好坏要看你在社会中解决问题的能力的高低,所以不同的人编程的结果是不同的。

 

 

 

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BGD150206315_/article/details/51559243
上一篇俄罗斯方块C语言的初步感受
下一篇指针和链表
博主设置当前文章不允许评论。

jsp成绩学生成绩录入系统

2008年12月13日 369KB 下载

java学生成绩查询系统

2017年11月29日 1.5MB 下载

学生成绩管理系统流程图

2010年04月28日 87KB 下载

MATLAB实现学生成绩查询系统

2018年04月24日 1.9MB 下载

学生成绩查询系统JAVA代码

2010年11月21日 129KB 下载

ASP学生成绩查询系统

2007年11月10日 468KB 下载

学生成绩查询系统源码

2017年01月21日 861KB 下载

没有更多推荐了,返回首页

关闭
关闭