c/c++语言开发共享C语言版学生信息管理系统

本文实例为大家分享了c语言版学生信息管理系统的具体代码,供大家参考,具体内容如下一.题目分析1.功能概述1)查询学生信息2)添加学生信息3)修改学生信息4)删除学生信息5)刷新学生信息6)保存学生信息

c/c++开发分享C语言版学生信息管理系统实例为大家分享了c语言版学生信息管理系统的具体代码,供大家参考,具体内容如下

一.题目分析

1.功能概述

1)查询学生信息
2)添加学生信息
3)修改学生信息
4)删除学生信息
5)刷新学生信息
6)保存学生信息
7)输出当前学生信息

2.题目要求:

1)使用结构体建立学生信息体制
2)实现七大基本功能
3)采用文件存储学生信息

二.算法构造

1.难点解析—-对文件的操作

1.1文件读取

  file * fp;   if ((fp = fopen(filename, "r")) == null) return 0;   //从文件读取信息    while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].studentid, &stu[j].studentname, &stu[j].studentage, &stu[j].studentsex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {   j++;   }

1.2文件写入

  file * fp;  fp = fopen(filename, "w");   for (i = 0; i < n; i++){   fprintf(fp, "%s%s%d%c%.lf%.lf%.lfn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex,   stu[i].score[0], stu[i].score[1], stu[i].score[2]);   }

2.流程图

C语言版学生信息管理系统

3.七大基本功能—-函数实现

3.1菜单函数:通过菜单建立用户与程序之间的交流

  void menu()/* 界面*/  {   int num;   printf(" nn  nn");   printf(" ******************************************************nn");   printf(" * 学生信息管理系统  *n n");   printf(" ******************************************************nn");   printf("*********************系统功能菜单************************* n");   printf(" ---------------------- ---------------------- n");   printf(" ********************************************* n");   printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * n");   printf(" ********************************************* n");   printf(" * 2.查询学生信息 * * 3.修改学生信息 * n");   printf(" ********************************************* n");   printf(" * 4.增加学生信息 * * 5.按学号删除信息 * n");   printf(" ********************************************* n");   printf(" * 6.显示当前信息 * * 7.保存当前学生信息* n");   printf(" ********************** ********************** n");   printf(" * 8.退出系统 *  n");   printf(" **********************  n");   printf(" ---------------------- ----------------------  n");   printf("请选择菜单编号:");   scanf("%d", &num);   switch (num)   {   case 0:help(); break;   case 1:flush(); break;   case 2:seek(); break;   case 3:modify(); break;   case 4:insert(); break;   case 5:del(); break;   case 6:display(); break;   case 7:save(); break;   case 8:   k = 0;    printf("即将退出程序!n");   break;   default:printf("请在0-8之间选择n");   }  }

3.2系统帮助与说明函数:适用于初次接触学生信息管理系统的用户参考

  void help()  {   printf("n0.欢迎使用系统帮助!n");   printf("n1.初次进入系统后,请先选择增加学生信息;n");   printf("n2.按照菜单提示键入数字代号;n");   printf("n3.增加学生信息后,切记保存;n");   printf("n4.谢谢您的使用!n");  }

3.3刷新学生信息函数

功能:调用刷新信息函数后,文件中再无学生信息

  int flush(){   char filename[len + 1];   int i = 0;   printf("请输入要刷新学生信息的文件名:n");   scanf("%s", filename);   int j = 0;   file * fp;   if ((fp = fopen(filename, "r")) == null) return 0;   //从文件读取信息    while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].studentid, &stu[j].studentname, &stu[j].studentage, &stu[j].studentsex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {   j++;   }   n = j;   printf("刷新成功!!!");   return n;  }

3.4查询学生信息函数

功能:通过输入要查询的学生学号或者姓名,与系统中的学生信息进行对比,若相等,则输出该学生的基本信息;反之,则输出该学生在该管理系统中不存在

查询方式:

1)按照学号查询
2)按照姓名查询

  void seek() /*查找*/  {   int i, item, flag;   char s1[21]; /* 以姓名和学号最长长度+1为准*/   printf("------------------n");   printf("-----1.按学号查询-----n");   printf("-----2.按姓名查询-----n");   printf("-----3.退出本菜单-----n");   printf("------------------n");   while (1)   {   printf("请选择子菜单编号:");   scanf("%d", &item);   flag = 0;   switch (item)   {   case 1:   printf("请输入要查询的学生的学号:n");   scanf("%s", s1);   for (i = 0; i<n; i++)   if (strcmp(s1,stu[i].studentid) == 0)   {   flag = 1;   printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n");   printf("--------------------------------------------------------------------n");   printf("%st%st%dt%6t%.1ft%.1ft%.1fn", stu[i].studentid,stu[i].studentname,stu[i].studentage,stu[i].studentsex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);   }   if (0 == flag)   printf("该学号不存在!n"); break;   case 2:   printf("请输入要查询的学生的姓名:n");   scanf("%s", s1);   for (i = 0; i<n; i++)   if (strcmp(stu[i].studentname, s1) == 0)   {   flag = 1;   printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n");   printf("--------------------------------------------------------------------n");   printf("%st%st%dt%ct%.1ft%.1ft%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);   }   if (0 == flag)   printf("该姓名不存在!n"); break;   case 3:return;   default:printf("请在1-3之间选择n");   }   }  }

3.5修改学生信息

功能:通过输入学号来选择要修改的该学号学生的信息内容,从而完成修改信息操作;

  //修改学生信息  void modify() /*修改信息*/  {   int i, item, num = -1;   char sex1, s1[len + 1], s2[len + 1]; /* 以姓名和学号最长长度+1为准*/   float score1;   printf("请输入要要修改的学生的学号:n");   scanf("%s", s1);   for (i = 0; i < n; i++){   if (strcmp(stu[i].studentid, s1) == 0){/*比较字符串是否相等*/   num = i;   printf("------------------n");   printf("1.修改姓名n");   printf("2.修改年龄n");   printf("3.修改性别n");   printf("4.修改c语言成绩n");   printf("5.修改高等数学成绩n");   printf("6.修改大学英语成绩n");   printf("7.退出本菜单n");   printf("------------------n");   while (1)   {   printf("请选择子菜单编号:");   scanf("%d", &item);   switch (item)   {   case 1:   printf("请输入新的姓名:n");   scanf("%s", s2);   strcpy(stu[num].studentname, s2);   break;   case 2:   printf("请输入新的年龄:n");   scanf("%d", stu[num].studentage);   break;   case 3:   printf("请输入新的性别:n");   scanf("%s", &sex1);   stu[i].studentsex = sex1;   break;   case 4:   printf("请输入新的c语言成绩:n");   scanf("%f", &score1);   stu[num].score[0] = score1;   break;   case 5:   printf("请输入新的高等数学成绩:n");   scanf("%f", &score1);   stu[num].score[1] = score1;   break;   case 6:   printf("请输入新的大学英语成绩:n");   scanf("%f", &score1);   stu[num].score[2] = score1;   break;   case 7: return;   default:printf("请在1-7之间选择n");   }   }   printf("修改完毕!请及时保存!n");   }   else{   printf("没有该学生学号!!!");   }   }  }

3.6添加学生信息函数

功能:添加学生信息,并保存至文件中

  //添加学生信息函数  void insert() /*插入函数*/  {   int i = n, j, flag;   printf("请输入待增加的学生数:n");   scanf("%d", &m);   if (m > 0){   do   {   flag = 1;   while (flag)   {   flag = 0;   printf("请输入第%d位学生的学号:n", i + 1);   scanf("%s", stu[i].studentid);   for (j = 0; j < i; j++){   if (strcmp(stu[i].studentid, stu[j].studentid) == 0){   printf("该学号已存在,请重新输入!n");   flag = 1;   break;   }   }   }   printf("请输入第%d 个学生的姓名:n", i+1);   scanf("%s", stu[i].studentname);   printf("请输入第%d 个学生的年龄:n", i+1);   scanf("%d", &stu[i].studentage);   printf("请输入第%d 个学生的性别:n", i+1);   scanf(" %c", &stu[i].studentsex);   printf("请输入第%d 个学生的c语言成绩n",i+1);   scanf("%f", &stu[i].score[0]);   printf("请输入第%d 个学生的高等数学成绩:n", i+1);   scanf("%f", &stu[i].score[1]);   printf("请输入第%d 个学生的大学英语成绩:n", i+1);   scanf("%f", &stu[i].score[2]);   if (0 == flag){   i++;   }   } while (i<n + m);   }   n += m;   printf("学生信息增加完毕!!!n");   system("pause");  }

3.7删除学生信息函数

功能:通过输入要删除学生信息的学号,删除该学生在该管理系统中的所有信息;

  //删除学生信息函数  void del()  {   int i, j, flag = 0;   char s1[len + 1];   printf("请输入要删除学生的学号:n");   scanf("%s", s1);   for (i = 0; i < n; i++){   if (strcpy(stu[i].studentid, s1) == 0){   flag = 1;   //要删除学生后面的学生往前移一位   for (j = i; j < n - 1; j++){   stu[j] = stu[j + 1];   }   }   }   //查找失败   if (0 == flag){   printf("该学号不存在!!!n");   }   if (1 == flag){   printf("删除成功!!!");   //删除成功,学生人数减1   n--;   }   system("pause");  }

3.8显示当前学生信息

功能:可以输出进行多种操作后的学生信息管理系统中的所有学生信息;

  //显示全部数据信息  void display()  {   int i;   printf("共有%d位学生的信息:n", n);   if (0 != n)   {   printf("学生学号 t学生姓名 t年龄 t性别 tc语言成绩t高等数学 t大学英语成绩n");   printf("--------------------------------------------------------------------n");   for (i = 0; i<n; i++)   {   printf("%s t%s t%d t%c t%.1ft%.1f t%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0],stu[i].score[1],stu[i].score[2]);   }   }   system("pause");  }

3.8保存学生信息

功能:将进行某些操作后的学生信息保存到指定文件中

  void save(){   int i;   file *fp;   char filename[len + 1];   printf("请输入要保存的文件名:n");   scanf("%s", filename);   fp = fopen(filename, "w");   for (i = 0; i < n; i++){   fprintf(fp, "%s%s%d%c%.lf%.lf%.lfn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex,   stu[i].score[0], stu[i].score[1], stu[i].score[2]);   }   printf("保存成功!!!n");   fclose(fp);   system("pause");  }

三.源程序代码

  #define _crt_secure_no_warnings 1  #include<stdio.h> /*i/o函数*/  #include<stdlib.h> /*其它说明*/  #include<string.h> /*字符串函数*/    #define len 15 /* 学号和姓名最大字符数,实际请更改*/  #define n 50 /* 最大学生人数,实际请更改*/    int k = 1, n = 0, m = 0;/* n代表当前记录的学生人数*/    //函数声明  void readfile();  void seek();  void modify();  void insert();  void del();  void display();  void save();  void menu();    //结构体保存学生信息  struct student{   char studentid[len+1];   char studentname[len+1];   int studentage;   char studentsex;   float score[3];  }stu[n];    //主函数  int main()  {   while (k)   {   menu();   }   system("pause");   return 0;  }    //系统帮助函数  void help()  {   printf("n0.欢迎使用系统帮助!n");   printf("n1.初次进入系统后,请先选择增加学生信息;n");   printf("n2.按照菜单提示键入数字代号;n");   printf("n3.增加学生信息后,切记保存;n");   printf("n4.谢谢您的使用!n");  }    //刷新文件  int flush(){   char filename[len + 1];   int i = 0;   printf("请输入要刷新学生信息的文件名:n");   scanf("%s", filename);   int j = 0;   file * fp;   if ((fp = fopen(filename, "r")) == null) return 0;   //从文件读取信息    while (fscanf(fp, "%s %s %s %d %d %d %d ", &stu[j].studentid, &stu[j].studentname, &stu[j].studentage, &stu[j].studentsex, &stu[j].score[0], &stu[j].score[1], &stu[j].score[2]) == 7) {   j++;   }   n = j;   printf("刷新成功!!!");   return n;  }    //查找学生信息  void seek() /*查找*/  {   int i, item, flag;   char s1[21]; /* 以姓名和学号最长长度+1为准*/   printf("------------------n");   printf("-----1.按学号查询-----n");   printf("-----2.按姓名查询-----n");   printf("-----3.退出本菜单-----n");   printf("------------------n");   while (1)   {   printf("请选择子菜单编号:");   scanf("%d", &item);   flag = 0;   switch (item)   {   case 1:   printf("请输入要查询的学生的学号:n");   scanf("%s", s1);   for (i = 0; i<n; i++)   if (strcmp(s1,stu[i].studentid) == 0)   {   flag = 1;   printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n");   printf("--------------------------------------------------------------------n");   printf("%st%st%dt%6t%.1ft%.1ft%.1fn", stu[i].studentid,stu[i].studentname,stu[i].studentage,stu[i].studentsex,stu[i].score[0],stu[i].score[1],stu[i].score[2]);   }   if (0 == flag)   printf("该学号不存在!n"); break;   case 2:   printf("请输入要查询的学生的姓名:n");   scanf("%s", s1);   for (i = 0; i<n; i++)   if (strcmp(stu[i].studentname, s1) == 0)   {   flag = 1;   printf("学生学号t学生姓名t年龄t性别tc语言成绩t高等数学t大学英语成绩n");   printf("--------------------------------------------------------------------n");   printf("%st%st%dt%ct%.1ft%.1ft%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0], stu[i].score[1], stu[i].score[2]);   }   if (0 == flag)   printf("该姓名不存在!n"); break;   case 3:return;   default:printf("请在1-3之间选择n");   }   }  }    //修改学生信息  void modify() /*修改信息*/  {   int i, item, num = -1;   char sex1, s1[len + 1], s2[len + 1]; /* 以姓名和学号最长长度+1为准*/   float score1;   printf("请输入要要修改的学生的学号:n");   scanf("%s", s1);   for (i = 0; i < n; i++){   if (strcmp(stu[i].studentid, s1) == 0){/*比较字符串是否相等*/   num = i;   printf("------------------n");   printf("1.修改姓名n");   printf("2.修改年龄n");   printf("3.修改性别n");   printf("4.修改c语言成绩n");   printf("5.修改高等数学成绩n");   printf("6.修改大学英语成绩n");   printf("7.退出本菜单n");   printf("------------------n");   while (1)   {   printf("请选择子菜单编号:");   scanf("%d", &item);   switch (item)   {   case 1:   printf("请输入新的姓名:n");   scanf("%s", s2);   strcpy(stu[num].studentname, s2);   break;   case 2:   printf("请输入新的年龄:n");   scanf("%d", stu[num].studentage);   break;   case 3:   printf("请输入新的性别:n");   scanf("%s", &sex1);   stu[i].studentsex = sex1;   break;   case 4:   printf("请输入新的c语言成绩:n");   scanf("%f", &score1);   stu[num].score[0] = score1;   break;   case 5:   printf("请输入新的高等数学成绩:n");   scanf("%f", &score1);   stu[num].score[1] = score1;   break;   case 6:   printf("请输入新的大学英语成绩:n");   scanf("%f", &score1);   stu[num].score[2] = score1;   break;   case 7: return;   default:printf("请在1-7之间选择n");   }   }   printf("修改完毕!请及时保存!n");   }   else{   printf("没有该学生学号!!!");   }   }  }    void sort()//按学号排序  {   int i, j, k, *p, *q, s;   char temp[len + 1], ctemp;   float ftemp;   for (i = 0; i<n - 1; i++)   {   for (j = n - 1; j>i; j--)   if (strcmp(stu[j - 1].studentid, stu[j].studentid)>0)   {   strcpy(temp, stu[j - 1].studentid);   strcpy(stu[j - 1].studentid, stu[j].studentid);   strcpy(stu[j].studentid, temp);   strcpy(temp, stu[j - 1].studentname);   strcpy(stu[j - 1].studentname, stu[j].studentname);   strcpy(stu[j].studentname, temp);   ctemp = stu[j - 1].studentsex;   stu[j - 1].studentsex = stu[j].studentsex;   stu[j].studentsex = ctemp;   p = &stu[j - 1].studentage;   q = &stu[j].studentage;   s = *q;   *q = *p;   *p = s;   for (k = 0; k<3; k++)   {   ftemp = stu[j - 1].score[k];   stu[j - 1].score[k] = stu[j].score[k];   stu[j].score[k] = ftemp;   }   }   }  }    //添加学生信息函数  void insert() /*插入函数*/  {   int i = n, j, flag;   printf("请输入待增加的学生数:n");   scanf("%d", &m);   if (m > 0){   do   {   flag = 1;   while (flag)   {   flag = 0;   printf("请输入第%d位学生的学号:n", i + 1);   scanf("%s", stu[i].studentid);   for (j = 0; j < i; j++){   if (strcmp(stu[i].studentid, stu[j].studentid) == 0){   printf("该学号已存在,请重新输入!n");   flag = 1;   break;   }   }   }   printf("请输入第%d 个学生的姓名:n", i+1);   scanf("%s", stu[i].studentname);   printf("请输入第%d 个学生的年龄:n", i+1);   scanf("%d", &stu[i].studentage);   printf("请输入第%d 个学生的性别:n", i+1);   scanf(" %c", &stu[i].studentsex);   printf("请输入第%d 个学生的c语言成绩n",i+1);   scanf("%f", &stu[i].score[0]);   printf("请输入第%d 个学生的高等数学成绩:n", i+1);   scanf("%f", &stu[i].score[1]);   printf("请输入第%d 个学生的大学英语成绩:n", i+1);   scanf("%f", &stu[i].score[2]);   if (0 == flag){   i++;   }   } while (i<n + m);   }   n += m;   printf("学生信息增加完毕!!!n");   system("pause");  }    //删除学生信息函数  void del()  {   int i, j, flag = 0;   char s1[len + 1];   printf("请输入要删除学生的学号:n");   scanf("%s", s1);   for (i = 0; i < n; i++){   if (strcpy(stu[i].studentid, s1) == 0){   flag = 1;   //要删除学生后面的学生往前移一位   for (j = i; j < n - 1; j++){   stu[j] = stu[j + 1];   }   }   }   //查找失败   if (0 == flag){   printf("该学号不存在!!!n");   }   if (1 == flag){   printf("删除成功!!!");   //删除成功,学生人数减1   n--;   }   system("pause");  }    //显示全部数据信息  void display()  {   int i;   printf("共有%d位学生的信息:n", n);   if (0 != n)   {   printf("学生学号 t学生姓名 t年龄 t性别 tc语言成绩t高等数学 t大学英语成绩n");   printf("--------------------------------------------------------------------n");   for (i = 0; i<n; i++)   {   printf("%s t%s t%d t%c t%.1ft%.1f t%.1fn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex, stu[i].score[0],stu[i].score[1],stu[i].score[2]);   }   }   system("pause");  }    void save(){   int i;   file *fp;   char filename[len + 1];   printf("请输入要保存的文件名:n");   scanf("%s", filename);   fp = fopen(filename, "w");   for (i = 0; i < n; i++){   fprintf(fp, "%s%s%d%c%.lf%.lf%.lfn", stu[i].studentid, stu[i].studentname, stu[i].studentage, stu[i].studentsex,   stu[i].score[0], stu[i].score[1], stu[i].score[2]);   }   printf("保存成功!!!n");   fclose(fp);   system("pause");  }    void menu()/* 界面*/  {   int num;   printf(" nn  nn");   printf(" ******************************************************nn");   printf(" * 学生信息管理系统  *n n");   printf(" ******************************************************nn");   printf("*********************系统功能菜单************************* n");   printf(" ---------------------- ---------------------- n");   printf(" ********************************************* n");   printf(" * 0.系统帮助及说明 * * 1.刷新学生信息 * n");   printf(" ********************************************* n");   printf(" * 2.查询学生信息 * * 3.修改学生信息 * n");   printf(" ********************************************* n");   printf(" * 4.增加学生信息 * * 5.按学号删除信息 * n");   printf(" ********************************************* n");   printf(" * 6.显示当前信息 * * 7.保存当前学生信息* n");   printf(" ********************** ********************** n");   printf(" * 8.退出系统 *  n");   printf(" **********************  n");   printf(" ---------------------- ----------------------  n");   printf("请选择菜单编号:");   scanf("%d", &num);   switch (num)   {   case 0:help(); break;   case 1:flush(); break;   case 2:seek(); break;   case 3:modify(); break;   case 4:insert(); break;   case 5:del(); break;   case 6:display(); break;   case 7:save(); break;   case 8:   k = 0;    printf("即将退出程序!n");   break;   default:printf("请在0-8之间选择n");   }  }

四.调试、测试以及实验结果

1.调试:

C语言版学生信息管理系统

2.测试:

输入数据类型与定义时不符合,程序运行过程中会出现错误

C语言版学生信息管理系统

3.实验结果:

(1)~(9)是一个连续的运行实验结果

(1)运行菜单

C语言版学生信息管理系统

(2)添加学生信息

C语言版学生信息管理系统

(3)保存学生信息

C语言版学生信息管理系统

(4)显示全部信息

C语言版学生信息管理系统

(5)修改学生信息

C语言版学生信息管理系统

(6)显示修改后全部信息

C语言版学生信息管理系统

(7)刷新学生信息

C语言版学生信息管理系统

(8)保存学生信息

C语言版学生信息管理系统

(9)显示刷新后的全部信息

C语言版学生信息管理系统

五、总结

编写一个功能齐全的、方便用户操作的学生管理系统,需要长期的实践与积累。
实践时检验的好办法,学到的知识经过实践的检验,才能更好的被自身吸收。文件的操作的程序编写应用对我来说,是一个没有经过多次实践的问题,所以我在写这部分程序时,还是有些难度。该程序中还存在一个问题就是,当输入一个与定义时不符的数据,程序在运行过程中会出现错误,修改办法还在思考,欢迎大家来与我互相共勉。

以上就是c/c++开发分享C语言版学生信息管理系统的全部内容,希望对大家的学习有所帮助,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/596272.html

(0)
上一篇 2021年5月8日
下一篇 2021年5月8日

精彩推荐