加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

c语言之学生信息管理系统(VS)实现

(2018-01-23 12:43:21)
标签:

c语言

vs2017

学生信息管理系统

分类: CProgram-Language

内容同Dev C++的内容一样,只是相比上一讲针对VS对于C中的修改做了改动。使其可以正常运行。主要修改的函数如下:

scanf--------------scanf_s

strcpy-------------strcpy_s

gets---------------gets_s

fopen-------------fopen_s

fscanf-------------fscanf_s

具体区别与使用将在下一篇博文中介绍。

#include
#include
#include
#include

#define M 50

typedef struct {               //定义学生信息结构体
 char num[20];            //学号
 char name[20];         //姓名
 char sex[5];         //性别
 int age;          //年龄
}students;

void return_menue();                                //返回主菜单
void print_menue();                                 //打印主菜单
int menue_select();                                 //主菜单选择
int enter(students t[]);                            //输入学生信息
void list(students t[], int n);                     //显示学生信息
void search_name(students t[], int n);              //按姓名查找显示学生信息
void search_num(students t[], int n);               //按序号查找显示学生信息
void change_num(students t[], int n);               //按学号修改学生信息
int del(students t[], int n);                       //删除学生信息
int add(students t[], int n);                       //插入学生信息
int load(students t[]);                             //从文件中读取学生信息
void print(students temp);                          //显示单条学生信息
void save(students t[], int n);                     //保存学生信息为文件
int find_name(students t[], int n, char *s);        //按姓名查找
int find_num(students t[], int n, char *s);         //按学号查找
             
void return_menue()
{
 char mistake[20];
 printf("按回车键返回主菜单...\n");
 gets_s(mistake,20);
 return;
}
void print_menue()
{
 printf("********************主菜单********************\n");
 printf("*              0. 录入学生信息               *\n");
 printf("*              1. 浏览学生信息               *\n");
 printf("*              2. 按姓名查找                 *\n");
 printf("*              3. 按学号查找                 *\n");
 printf("*              4. 按学号删除                 *\n");
 printf("*              5. 按学号修改                 *\n");
 printf("*              6. 插入一组学生信息           *\n");
 printf("*              7. 保存学生信息到文件         *\n");
 printf("*              8. 加载文件到内存             *\n");
 printf("*              9. 退出                       *\n");
 printf("**********************************************\n");
 return;
}
int menue_select()
{
 print_menue();
 printf("\n输入您的菜单选项编号(0-11):");
 int c;
 while (1)
 {
  scanf_s("%d", &c);
  getchar();
  if (c > 11 || c < 0)
  {
   system("cls");
   print_menue();
   printf("\n输入的选项编号无效,请重新输入:");
   continue;
  }
  else
   break;
 }
 return c;
}

//输入学生信息,形参为结构体数组,函数值返回类型为整型表示信息长度
int enter(students t[])
{
 int i, n;
 system("cls");
 printf("\n请输入需要记录学生的条数\n");
 scanf_s("%d", &n);
 system("cls");
 printf("请输入%d位学生的信息:\n", n);
 printf("学号          姓名          性别          年龄\n");
 printf("--------------------------------------------\n");
 for (i = 0; i < n; i++)
 {
  scanf_s("%s", t[i].num,20);
  scanf_s("%s", t[i].name,20);
  scanf_s("%s", t[i].sex,5);
  scanf_s("%d", &t[i].age);
  getchar();
 }
 printf("信息录入中...\n");
 Sleep(10);
 if (i == n)
  printf("信息录入成功!\n");
 else
  printf("信息录入失败!\n");
 return n;
}
//显示信息,形参为结构体数组和信息条数
void list(students t[], int n)
{
 int i;
 system("cls");
 if (n == 0)
 {
  printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
  return;
 }
 else
 {
  printf("\n*******************学生清单******************\n");
  printf("学号          姓名          性别          年龄\n");
  printf("---------------------------------------------\n");
  for (i = 0; i < n; i++)
  {
   printf("%-14s%-14s%-14s%-14d\n", t[i].num, t[i].name, t[i].sex, t[i].age);
   if ((i + 1) % 10 == 0 )
   {
    printf("---------------------------------------------\n");
    printf("每页显示10位学生的信息,按回车向后翻页...\n");
    getchar();
    system("cls");
    printf("\n*******************学生清单*******************\n");
    printf("学号          姓名          性别          年龄\n");
    printf("---------------------------------------------\n");
   }
  }
  printf("---------------------------------------------\n");
 }

}
void search_name(students t[], int n)
{
 char s[20];
 int i;
 system("cls");
 if (n == 0)
 {
  printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
  return;
 }
 printf("请输入查找的学生的名字:\n");
 scanf_s("%s", s,20);
 getchar();
 i = find_name(t, n, s);
 if (i > n - 1)
  printf("没有姓名为%s的学生!\n", s);
 else
  print(t[i]);
}
void search_num(students t[], int n)
{
 system("cls");
 int no;
 char s[20];
 if (n == 0)
 {
  printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
  return;
 }
 printf("请输入查找信息学生的学号:\n");
 scanf_s("%s", s,20);
 getchar();
 no = find_num(t, n, s);
 if (no >= 0 && no < n)
 {
  print(t[no]);
  printf("\r\n");
 }
 else
  printf("学号为%s的学生不存在!\n", s);
}
void change_num(students t[], int n)
{
 if (n == 0)
 {
  printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
  return;
 }
 system("cls");
 char num[20];
 int i;
 printf("请输入要修改的学生信息的学号:\n");
 scanf_s("%s", num,20);
 i = find_num(t, n, num);
 if (i == n)
  printf("没有找到学号为%s的学生!\n", num);
 else
 {
  printf("学号为%s的学生信息修改前为:\n", num);
  print(t[i]);
  printf("\n\n");
  printf("请输入修改后的信息:\n");
  printf("学号          姓名          性别          年龄\n");
  printf("---------------------------------------------\n");
  scanf_s("%s", t[i].num,20);
  scanf_s("%s", t[i].name,20);
  scanf_s("%s", t[i].sex,5);
  scanf_s("%d", &t[i].age);
  getchar();
 }
 system("cls");
 printf("正在修改学号为%s的学生信息...\n", num);
 Sleep(1);
 system("cls");
 printf("*****修改成功*****\n");
 printf("修改后的信息为:\n");
 print(t[i]);
}
int del(students t[], int n)
{
 char s[20];
 int ch = 0;
 int i;
 system("cls");
 if (n == 0)
 {
  printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存\n");
  return n;
 }
 printf("请输入要删除的学生姓名:\n");
 scanf_s("%s", s,20);
 getchar();
 i = find_name(t, n, s);
 if (i == n)
  printf("没有找到名字为%s的学生!\n", s);
 else
 {
  printf("正在删除...\n");
  for (; i < n; i++)
  {
   strcpy_s(t[i].name, strlen(t[i].name),t[i + 1].name);
   strcpy_s(t[i].num, strlen(t[i].num),t[i + 1].num);
   strcpy_s(t[i].sex,strlen(t[i].sex), t[i + 1].sex);
   t[i].age = t[i + 1].age;
  }
  n--;
  printf("删除成功!\n");
 }
 return n;
}
int add(students t[], int n)
{
 system("cls");
 if (n == 0)
 {
  printf("内存中无学生信息!\n请先录入学生信息或加载学生信息到内存中\n");
  return n;
 }
 students temp;
 int i, j;
 char s[20];
 printf("请输入要插入的学生信息:\n");
 printf("学号          姓名          性别          年龄\n");
 printf("--------------------------------------------\n");
 scanf_s("%s%s%s%d", temp.num,20, temp.name,20, temp.sex,5, &temp.age);
 getchar();
 printf("--------------------------------------------\n");
 if (n > 0)
 {
  printf("请输入插入位置的姓名,将新信息插入在该学生前面:\n");
  scanf_s("%s", s,20);
  getchar();
  i = find_name(t, n, s);
 }
 else
  i = 0;
 for (j = n - 1; j >= i; j--)
 {
  strcpy_s(t[i + 1].num,strlen(t[i+1].num),t[i].num);
  strcpy_s(t[i + 1].name,strlen(t[i+1].name), t[i].name);
  strcpy_s(t[i + 1].sex,strlen(t[i+1].sex), t[i].sex);
  t[i + 1].age = t[i].age;
 }
 strcpy_s(t[i].num,strlen(t[i].num), temp.num);
 strcpy_s(t[i].name,strlen(t[i].name), temp.name);
 strcpy_s(t[i].sex, strlen(t[i].sex),temp.sex);
 t[i].age = temp.age;
 n++;
 printf("信息插入成功!\n");
 return n;
}
void save(students t[], int n)
{
 system("cls");
 int i,err;
 FILE *fp;
 err = fopen_s(&fp, "record.txt", "wb");

 if (err !=0)
 {
  printf("无法打开学生信息文件!\n");
  exit(1);
 }
 printf("\n正在保存...\n");
 fprintf(fp, "%d", n);
 fprintf(fp, "\r\n");
 for (i = 0; i < n; i++)
 {
  fprintf(fp, "%-14s%-14s%-14s%-14d", t[i].num, t[i].name, t[i].sex, t[i].age);
  fprintf(fp, "\r\n");
 }
 fclose(fp);
 Sleep(1);
 system("cls");
 printf("*****保存成功*****\n");
}
int load(students t[])
{
 int i, n,err;
 FILE *fp;
 err=fopen_s(&fp, "record.txt", "rb");
 if (err!=0)
 {
  printf("无法打开学生信息文件!\n");
  exit(1);
 }
 fscanf_s(fp, "%d",&n);
 for (i = 0; i < n; i++)
  fscanf_s(fp, "sssd",t[i].num, strlen(t[i].num),t[i].name, strlen(t[i].name),t[i].sex, strlen(t[i].sex), &t[i].age);
 fclose(fp);
 printf("成功加载学生信息到内存中!\n");
 return n;
}
//显示指定的一组数据
void print(students temp)
{
 printf("\n*******************学生清单*******************\n");
 printf("学号          姓名          性别          年龄\n");
 printf("---------------------------------------------\n");
 printf("%-14s%-14s%-14s%-14d", temp.num, temp.name, temp.sex, temp.age);    // printf("---------------------------------------------\n");
}
int find_name(students t[], int n, char *s)
{
 int i;
 for (i = 0; i < n; i++)
  if (strcmp(s, t[i].name) == 0)
   return i;
 return i;
}
int find_num(students t[], int n, char *s)
{
 int i;
 for (i = 0; i < n; i++)
  if (strcmp(s, t[i].num) == 0)
   return i;
 return i;
}
int main()
{
 system("TITLE 学生信息管理系统");//设置窗口标题
 system("mode con cols=48 lines=20");//设置窗口宽度高度
 system("color b0");
 students stu[M]; //定义结构体数组
 int length = 0; //保存信息条数
 for (;;)
 {
  system("cls");
  switch (menue_select())
  {
  case 0:
   length = enter(stu);       break;
  case 1:
   list(stu, length);            break;
  case 2:
   search_name(stu, length);     break;
  case 3:
   search_num(stu, length);      break;
  case 4:
   length = del(stu, length);    break;
  case 5:
   change_num(stu, length);      break;
  case 6:
   length = add(stu, length);    break;
  case 7:
   save(stu, length);            break;
  case 8:
   length = load(stu);           break;
  case 9:
  {
   system("pasue");
   exit(0);                      break;
  }
  }
  return_menue();
 }
 return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有