当前位置:   article > 正文

C语言程序项目实训(学生信息管理系统)_c语言实训项目

c语言实训项目

前言

C语言学完了,知识有很多,很繁琐,相信我们多多少少积累了很多的知识和经验,那么我们不妨练练手试试几个小项目,通过编程学生信息管理系统,我们运用到了指针,数组,循环,结构体,枚举,函数等知识,本人是在VS2022环境下编译的,导致与其他的编译器略显不同。废话不多说,我们直接开始。

正文

头文件模块(contact.h):

  1. #pragma once
  2. #define MAX_NAME 20
  3. #define MAX_XUEHAO 10
  4. #define MAX_SEX 10
  5. #define MAX_TELE 12
  6. #define MAX_ADDR 10
  7. #define max_xinxi 100
  8. typedef struct stu
  9. {
  10. char name[MAX_NAME];
  11. char xuehao[MAX_XUEHAO];
  12. char sex[MAX_SEX];
  13. char tele[MAX_TELE];
  14. char addr[MAX_ADDR];
  15. int age;
  16. }stu;
  17. struct con
  18. {
  19. stu data[max_xinxi];//存放添加进来的信息
  20. int sz;//当前通信录中信息的个数
  21. };
  22. //初始化通讯录
  23. void chushihua(struct con* pc);
  24. //增加信息函数
  25. void Addcontact(struct con* pc);
  26. //打印信息函数
  27. void Printcontact(const struct con* pc);
  28. //删除信息函数
  29. void Delcontact(struct con* pc);
  30. //查找信息函数
  31. void search(const struct con* pc);
  32. //修改信息函数
  33. void modify(struct con* pc);
  34. //排序信息函数(按年龄进行升序)
  35. void sort(struct con* pc);

源文件的函数实现(contact.c):

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. #include"contact.h"
  3. void chushihua(struct con* pc)
  4. {
  5. pc->sz = 0;
  6. //memset()--内存设置函数
  7. memset(pc->data, 0, sizeof(pc->data));
  8. }
  9. void Addcontact(struct con* pc)
  10. {
  11. if (pc->sz == max_xinxi)
  12. {
  13. printf("通讯录已满,无法添加\n");
  14. return;
  15. }
  16. //增加信息
  17. printf("请输入名字:");
  18. scanf("%s", pc->data[pc->sz].name);
  19. printf("请输入学号:");
  20. scanf("%s", pc->data[pc->sz].xuehao);
  21. printf("请输入性别:");
  22. scanf("%s", pc->data[pc->sz].sex);
  23. printf("请输入电话:");
  24. scanf("%s", pc->data[pc->sz].tele);
  25. printf("请输入住址:");
  26. scanf("%s", pc->data[pc->sz].addr);
  27. printf("请输入年龄:");
  28. scanf("%d", &(pc->data[pc->sz].age));
  29. pc->sz++;
  30. printf("添加成功!\n");
  31. }
  32. void Printcontact(const struct con* pc)
  33. {
  34. //打印标题
  35. printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2s\n", "名字", "学号", "性别", "电话", "住址", "年龄");
  36. //打印数据
  37. for (int i = 0; i < pc->sz; i++)
  38. {
  39. printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2d\n",
  40. pc->data[i].name,
  41. pc->data[i].xuehao,
  42. pc->data[i].sex,
  43. pc->data[i].tele,
  44. pc->data[i].addr,
  45. pc->data[i].age);
  46. }
  47. }
  48. static int findbyxuehao(struct con* pc, char xuehao[])
  49. {
  50. for (int i = 0; i < pc->sz; i++)
  51. {
  52. if (strcmp(pc->data[i].xuehao,xuehao)==0)//strcmp()函数查找字符串
  53. {
  54. return i;//找到了,并返回该学生所在数组元素的下标
  55. }
  56. }
  57. return -1;//找不到
  58. }
  59. void Delcontact(struct con* pc)
  60. {
  61. char xuehao[MAX_XUEHAO] = {0};
  62. if (pc->sz == 0)
  63. {
  64. printf("通讯录为空,无法删除\n");
  65. }
  66. printf("请输入要删除人的学号:\n");
  67. scanf("%s",xuehao);
  68. int pos = findbyxuehao(pc, xuehao);
  69. if (pos == -1)
  70. {
  71. printf("要删除的人不存在\n");
  72. printf("请重新选择!\n");
  73. return;
  74. }
  75. for (int i = pos; i < pc->sz - 1; i++)
  76. {
  77. pc->data[i]= pc->data[i + 1];
  78. }
  79. pc->sz--;
  80. printf("删除成功!\n");
  81. }
  82. void search(const struct con* pc)
  83. {
  84. char xuehao[MAX_XUEHAO] = { 0 };
  85. printf("请输入要查找人的学号:\n");
  86. scanf("%s", xuehao);
  87. int pos = findbyxuehao(pc, xuehao);
  88. if(pos == -1)
  89. {
  90. printf("要查找的人不存在\n");
  91. printf("请重新选择!\n");
  92. return;
  93. }
  94. else
  95. {
  96. printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2s\n", "名字", "学号", "性别", "电话", "住址", "年龄");
  97. printf("%-3s\t%-10s\t%-1s\t%-12s\t%-10s\t%-2d\n",
  98. pc->data[pos].name,
  99. pc->data[pos].xuehao,
  100. pc->data[pos].sex,
  101. pc->data[pos].tele,
  102. pc->data[pos].addr,
  103. pc->data[pos].age);
  104. }
  105. }
  106. void modify(struct con* pc)
  107. {
  108. char xuehao[MAX_XUEHAO] = { 0 };
  109. printf("请输入要修改人的学号:\n");
  110. scanf("%s", xuehao);
  111. int pos = findbyxuehao(pc, xuehao);
  112. if (pos == -1)
  113. {
  114. printf("要修改的人不存在\n");
  115. printf("请重新选择!\n");
  116. return;
  117. }
  118. else
  119. {
  120. printf("请输入名字:");
  121. scanf("%s", pc->data[pos].name);
  122. printf("请输入学号:");
  123. scanf("%s", pc->data[pos].xuehao);
  124. printf("请输入性别:");
  125. scanf("%s", pc->data[pos].sex);
  126. printf("请输入电话:");
  127. scanf("%s", pc->data[pos].tele);
  128. printf("请输入住址:");
  129. scanf("%s", pc->data[pos].addr);
  130. printf("请输入年龄:");
  131. scanf("%d", &(pc->data[pos].age));
  132. printf("修改成功!\n");
  133. }
  134. }
  135. void sort(struct con* pc)
  136. {
  137. stu tmp = {0};
  138. for (int i = 0; i < pc->sz-1; i++)
  139. {
  140. for (int j = 0; j < pc->sz - 1 - i; j++)
  141. {
  142. if (pc->data[j].age > pc->data[j + 1].age)
  143. {
  144. stu tmp= pc->data[j];
  145. pc->data[j] = pc->data[j + 1];
  146. pc->data[j + 1]= tmp;
  147. }
  148. }
  149. }
  150. printf("按年龄升序成功,请执行下一步操作!\n");
  151. }

源文件的菜单(test.c):

  1. #define _CRT_SECURE_NO_WARNINGS 1
  2. //通讯录的实现功能:要实现存放100个学生的信息
  3. // 每个人的信息:名字+学号+性别+电话+住址+年龄
  4. //增加学生的信息
  5. //删除学生的信息
  6. //查找学生的信息
  7. //修改学生的信息
  8. //打印学生的信息
  9. //排序学生的信息
  10. #include<stdio.h>
  11. #include<stdlib.h>
  12. #include<string.h>
  13. #include"contact.h"
  14. void menu()
  15. {
  16. printf(" --------------------------------------------------\n");
  17. printf("| 学生信息管理系统 | \n");
  18. printf("| (1)添加 |\n");
  19. printf("| (2)删除 |\n");
  20. printf("| (3)查找 |\n");
  21. printf("| (4)修改 |\n");
  22. printf("| (5)打印 |\n");
  23. printf("| (6)排序 |\n");
  24. printf("| (0)退出 |\n");
  25. printf(" --------------------------------------------------\n");
  26. }
  27. enum option {
  28. EXIT,
  29. ADD,
  30. DEL,
  31. SEARCH,
  32. MODIFY,
  33. PRINT,
  34. SORT,
  35. };
  36. int main()
  37. {
  38. int input=0;
  39. struct con stu1;
  40. chushihua(&stu1);
  41. do
  42. {
  43. menu();
  44. printf("请选择:");
  45. scanf("%d", &input);
  46. switch (input)
  47. {
  48. case ADD:
  49. //增加信息
  50. Addcontact(&stu1);
  51. break;
  52. case DEL:
  53. //删除信息
  54. Delcontact(&stu1);
  55. break;
  56. case SEARCH:
  57. //查找信息
  58. search(&stu1);
  59. break;
  60. case MODIFY:
  61. //修改信息
  62. modify(&stu1);
  63. break;
  64. case PRINT:
  65. //打印信息
  66. Printcontact(&stu1);
  67. break;
  68. case SORT:
  69. //排序信息
  70. sort(&stu1);
  71. break;
  72. case EXIT:
  73. //退出
  74. printf("退出通讯录\n");
  75. break;
  76. default:
  77. printf("选择错误,请重新选择\n");
  78. break;
  79. }
  80. } while (input);
  81. return 0;
  82. }

添加功能:

打印功能 :

查找功能:

 修改功能:

 删除功能:

 排序功能:我们不妨打印出结果看看是否进行了这一步操作,从图上来看,答案当然是是进行了。

 

 由于我是初学者,以目前的能力暂时还无法与数据库连接,所以少了一个保存至文件的功能,这些数据无法被存储。后面会用链表重新写一份,还请各位大佬多多指点。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/626577
推荐阅读
相关标签
  

闽ICP备14008679号