浅易的门生信息管理体系制作——C语言实现

打印 上一主题 下一主题

主题 1802|帖子 1802|积分 5406

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
菜单代码

  1. #include "head.h"
  2. int main(int argc, const char *argv[])
  3. {
  4.         int ch,k;
  5.         //登录注册
  6.         while(1)
  7.         {
  8.                 printf("\t1、注册\n");
  9.                 printf("\t2、登录\n");
  10.                 printf("\t0、退出\n");
  11.                
  12.                 printf("请输入你的选择:");
  13.                 scanf("%d",&ch);
  14.                 getchar();
  15.                 switch(ch)
  16.                 {
  17.                         case 1:
  18.                                 {
  19.                                         regist();//注册函数
  20.                                 }
  21.                                 break;
  22.                         case 2:
  23.                                 {
  24.                                         k = login();//登录函数
  25.                                 }
  26.                                 break;
  27.                         case 0:
  28.                                 {
  29.                                         exit(EXIT_SUCCESS);//退出函数
  30.                                 }
  31.                                 break;
  32.                 }
  33.                 if(k == 1)
  34.                 {
  35.                         break;
  36.                 }
  37.         }
  38.         while(1)
  39.         {
  40.                 printf("\t------学生管理系统首页------\n");
  41.                 printf("\t1、录入学生信息\n");
  42.                 printf("\t2、输出学生信息\n");
  43.                 printf("\t3、任意位置删除学生信息\n");
  44.                 printf("\t4、任意位置插入学生信息\n");
  45.                 printf("\t5、任意位置修改学生信息\n");
  46.                 printf("\t6、任意位置查找学生信息\n");
  47.                 printf("\t7、表头插入一个学生信息\n");
  48.                 printf("\t8、表尾插入一个学生信息\n");
  49.                 printf("\t9、按照姓名查找学生信息并删除\n");
  50.                 printf("\t10、按年龄查找学生并修改学号为10086\n");
  51.                 printf("\t0、退出\n");
  52.                 printf("请输入你的选择:");
  53.                 scanf("%d",&ch);
  54.                
  55.                 Plink L;
  56.                 switch(ch)
  57.                 {
  58.                 case 1:
  59.                         {
  60.                                 L = create();
  61.                                 input_link(L);
  62.                         }
  63.                         break;
  64.                 case 2:
  65.                         {
  66.                                 output_link(L);
  67.                         }
  68.                         break;
  69.                 case 3:
  70.                         {
  71.                                 int pos;
  72.                                 printf("请输入需要删除的学生位置:");
  73.                                 scanf("%d",&pos);
  74.                                 del_pos(L,pos);
  75.                         }
  76.                         break;
  77.                 case 4:
  78.                         {
  79.                                 insert_pos(L);
  80.                         }
  81.                         break;
  82.                 case 5:
  83.                         {
  84.                                 int pos;
  85.                                 printf("请输入需要修改的学生位置:");
  86.                                 scanf("%d",&pos);
  87.                                 edit_pos(L,pos);
  88.                         }
  89.                         break;
  90.                 case 6:
  91.                         {
  92.                                 int pos;
  93.                                 printf("请输入需要查找的学生位置:");
  94.                                 scanf("%d",&pos);
  95.                                 find_pos(L,pos);
  96.                         }
  97.                         break;
  98.                 case 7:
  99.                         {
  100.                                 stu e;
  101.                                 printf("表头插入一个学生信息\n");
  102.                                 printf("请输入需要插入学生的信息:");
  103.                                 scanf("%d%s%d",&e.id,e.name,&e.age);
  104.                                 insert_front(L,e);
  105.                         }
  106.                         break;
  107.                 case 8:
  108.                         {
  109.                                 stu e;
  110.                                 printf("表尾插入一个学生信息\n");
  111.                                 printf("请输入需要插入学生的信息:");
  112.                                 scanf("%d%s%d",&e.id,e.name,&e.age);
  113.                                 insert_rear(L,e);
  114.                         }
  115.                         break;
  116.                 case 9:
  117.                         {
  118.                                 int fage;
  119.                                 printf("请输入需要查找的年龄:");
  120.                                 scanf("%d",&fage);
  121.                                 find_age(L,fage);
  122.                         }
  123.                         break;
  124.                 case 10:
  125.                         {
  126.                                 int fage;
  127.                                 printf("请输入需要查找的年龄:");
  128.                                 scanf("%d",&fage);
  129.                                 find_age_id(L,fage);
  130.                         }
  131.                         break;
  132.                 case 0:
  133.                         {
  134.                                 exit(EXIT_SUCCESS);
  135.                         }
  136.                         break;
  137.                 }
  138.         }
  139.         return 0;
  140. }
复制代码
功能函数代码

  1. #include "head.h"
  2. //登录注册部分函数
  3. int regist()
  4. {
  5.         char regist_name[20];//注册登录用户名
  6.         char regist_code[20];//注册密码
  7.        
  8.         printf("请输入注册用户名和密码:");
  9.         fgets(regist_name,sizeof(regist_name),stdin);
  10.         //scanf("%s",regist_name);
  11.         fgets(regist_code,sizeof(regist_code),stdin);
  12.         //scanf("%s",regist_code);
  13.        
  14.         regist_name[strlen(regist_name)-1] = '\0';
  15.         regist_code[strlen(regist_code)-1] = '\0';
  16.         //将数据写入用户数据文件
  17.         FILE *fp1;
  18.         fp1 = fopen("./user_data.txt","a");
  19.         if(fp1 == NULL)
  20.         {
  21.                 perror("fp1");
  22.                 return -1;
  23.         }
  24.         fprintf(fp1,"%s %s ",regist_name,regist_code);
  25.         printf("注册成功!\n");
  26.         fclose(fp1);
  27.         return 0;
  28. }
  29. int login()
  30. {
  31.         char regist_name[20];
  32.         char regist_code[20];
  33.         char login_name[20];
  34.         char login_code[20];
  35.         int login_max = 5;
  36.         for(int i=0;i<login_max;i++)
  37.         {
  38.                 printf("这是你第%d次输入,你还有%d次输入机会\n",i+1,login_max-i);
  39.                 printf("请输入用户名和密码:");
  40.                 fgets(login_name,sizeof(login_name),stdin);
  41.                 fgets(login_code,sizeof(login_code),stdin);
  42.                 login_name[strlen(login_name)-1] = '\0';
  43.                 login_code[strlen(login_code)-1] = '\0';
  44.                 FILE *fp2;
  45.                 fp2 = fopen("./user_data.txt","r");
  46.                 if(fp2 == NULL)
  47.                 {
  48.                         perror("fp2");
  49.                         return -1;
  50.                 }
  51.                 int flag = 0;
  52.                 while(1)
  53.                 {
  54.                         //从用户数据文件夹提取数据
  55.                         int ret = fscanf(fp2,"%s %s",regist_name,regist_code);
  56.                         //读取到文件末尾
  57.                         if(ret < 0)
  58.                         {
  59.                                 break;
  60.                         }
  61.                         if(strcmp(regist_name,login_name)==0&&strcmp(regist_code,login_code)==0)
  62.                         {
  63.                                 flag = 1;
  64.                                 printf("登录成功!\n");
  65.                                 return 1;
  66.                         }
  67.                 }
  68.                 if(flag == 0)
  69.                 {
  70.                         printf("登录失败!\n");
  71.                 }
  72.                 fclose(fp2);
  73.         }
  74.         printf("输入次数已用尽,系统锁定\n");
  75.         while(1);
  76. return 0;
  77. }
  78. //管理学生信息部分函数
  79. //空间申请函数
  80. Plink apply()
  81. {
  82.         Plink p = malloc(sizeof(Link));
  83.         if(p == NULL)
  84.         {
  85.                 printf("申请失败\n");
  86.                 return NULL;
  87.         }
  88.         return p;
  89. }
  90. //创建链表函数
  91. Plink create()
  92. {
  93.         Plink p = apply();
  94.         if(p == NULL)
  95.         {
  96.                 printf("创建失败!\n");
  97.                 return NULL;
  98.         }
  99.         p->len = 0;
  100.         p->next = NULL;
  101.         return p;
  102. }
  103. //头插法创建
  104. void insert_front(Plink L,stu e)
  105. {
  106.         if(L == NULL)
  107.         {
  108.                 printf("插入失败!\n");
  109.                 return;
  110.         }
  111.         Plink p = apply();
  112.         if(NULL == p)
  113.         {
  114.                 printf("申请正常节点失败!\n");
  115.         }
  116.         p->data = e;
  117.         p->next = L->next;
  118.         L->next = p;
  119.         L->len++;
  120.        
  121. }
  122. //信息输入函数
  123. void input_link(Plink L)
  124. {
  125.         stu e;
  126.         int n,i;
  127.         printf("请输入学生数量:");
  128.         scanf("%d",&n);
  129.         for(i=0;i<n;i++)
  130.         {
  131.                 printf("请输入学生信息:");
  132.                 scanf("%d%s%d",&e.id,e.name,&e.age);
  133.                 insert_front(L,e);
  134.         }
  135. }
  136. //信息输出函数
  137. void output_link(Plink L)
  138. {
  139.         if(L == NULL)
  140.         {
  141.                 printf("输出失败!\n");
  142.                 return;
  143.         }
  144.         Plink t = L->next;
  145.         while(t != NULL)
  146.         {
  147.                 printf("学号:%d\t姓名:%s\t年龄:%d\n",t->data.id,t->data.name,t->data.age);
  148.                 t = t->next;
  149.         }
  150. }
  151. //任意位置删除学生信息
  152. void del_pos(Plink L,int pos)
  153. {
  154.        
  155.         if(pos<1||pos>L->len||L == NULL||L->len ==0)
  156.         {
  157.                 printf("删除失败!\n");
  158.                 return;
  159.         }
  160.         Plink t = L;
  161.         int i;
  162.         for(i=0;i<pos-1;i++)
  163.         {
  164.                 t = t->next;
  165.         }
  166.         Plink Q = t->next;
  167.         t->next = Q->next;
  168.         free(Q);
  169.         Q = NULL;
  170.         L->len--;;
  171.        
  172. }
  173. //任意位置插入学生信息
  174. void insert_pos(Plink L)
  175. {
  176.         int pos,i;
  177.         stu e;
  178.         printf("请输入需要插入信息的位置:");
  179.         scanf("%d",&pos);
  180.         if(pos<1||pos>L->len+1)
  181.         {
  182.                 printf("插入失败!\n");
  183.                 return;
  184.         }
  185.        
  186.         Plink t = L;
  187.         for(i=0;i<pos-1;i++)
  188.         {
  189.                 t = t->next;
  190.         }
  191.         Plink p = apply();
  192.         printf("请输入需要插入的学生信息:");
  193.         scanf("%d%s%d",&e.id,e.name,&e.age);
  194.         p->data = e;
  195.         p->next = t->next;
  196.         t->next = p;
  197.         L->len++;
  198. }
  199. //任意位置查找学生信息
  200. void find_pos(Plink L,int pos)
  201. {
  202.         Plink t = L;
  203.         if(pos<1||pos>L->len||L->len == 0||L == NULL)
  204.         {
  205.                 printf("查找失败!\n");
  206.                 return;
  207.         }
  208.         for(int i=0;i<pos;i++)
  209.         {
  210.                 t = t->next;
  211.         }
  212.         printf("第%d位学生的信息:学号:%d姓名:%s年龄:%d\n",pos,t->data.id,t->data.name,t->data.age);
  213. }
  214. //任意位置修改学生信息
  215. void edit_pos(Plink L,int pos)
  216. {
  217.         Plink t = L;
  218.         if(pos<1||pos>L->len||L == NULL||L->len == 0)
  219.         {
  220.                 printf("修改失败!\n");
  221.                 return;
  222.         }
  223.         for(int i=0;i<pos;i++)
  224.         {
  225.                 t=t->next;
  226.         }
  227.         stu e;
  228.         printf("请输入需要修改的学生信息:");
  229.         scanf("%d%s%d",&e.id,e.name,&e.age);
  230.         t->data = e;
  231. }
  232. //表头插入一个学生(头插法插入一个学生)直接调用头插法
  233. //表尾插入一个学生信息
  234. void insert_rear(Plink L,stu e)
  235. {
  236.         Plink t = L;
  237.         if(L == NULL)
  238.         {
  239.                 printf("插入失败\n");
  240.                 return;
  241.         }
  242.         for(int i=0;i<L->len;i++)
  243.         {
  244.                 t= t->next;
  245.         }
  246.         Plink p = apply();
  247.         p->data = e;
  248.         p->next = NULL;
  249.         t->next = p;
  250.         L->len++;
  251. }
  252. //按年龄查找学生信息
  253. void find_age(Plink L,int fage)
  254. {
  255.         int pos=1;
  256.         Plink t = L->next;
  257.         while(t != NULL)
  258.         {
  259.                 if(t->data.age == fage)
  260.                 {
  261.                         printf("%d年龄的学生有:学号:%d姓名:%s年龄:%d\n",fage,t->data.id,t->data.name,t->data.age);
  262.                         printf("该年龄的学生位置为:%d\n",pos);
  263.                         Plink Q = t->next;
  264.                         del_pos(L,pos);
  265.                         t = Q;
  266.                         printf("删除成功!\n");
  267.                 }
  268.                 else
  269.                 {
  270.                         pos = pos+1;
  271.                         t = t->next;
  272.                 }
  273.         }
  274. }
  275. //按年龄查找学生信息,修改学号为10086
  276. void find_age_id(Plink L,int fage)
  277. {
  278.         Plink t = L->next;
  279.         while(t != NULL)
  280.         {
  281.                 if(t->data.age == fage)
  282.                 {
  283.                         printf("将%d年龄的学生学号修改为10086\n",fage);
  284.                         t->data.id = 10086;
  285.                         t=t->next;
  286.                 }
  287.                 else
  288.                 {
  289.                         t= t->next;
  290.                 }
  291.         }
  292. }
复制代码
头文件代码

  1. #ifndef _HEAD_H_
  2. #define _HEAD_H_
  3. #include <myhead.h>
  4. #define MAX 30
  5. typedef struct students
  6. {
  7.         int id;
  8.         char name[20];
  9.         int age;
  10. }stu;
  11. typedef struct node
  12. {
  13.         union
  14.         {
  15.                 int len;
  16.                 stu data;
  17.         };
  18.         struct node *next;
  19. }Link,*Plink;
  20. int regist();
  21. int login();
  22. Plink apply();
  23. Plink create();
  24. void insert_front(Plink,stu);
  25. void input_link(Plink);
  26. void output_link(Plink);
  27. void del_pos(Plink,int);
  28. void insert_pos(Plink);
  29. void find_pos(Plink,int);
  30. void edit_pos(Plink,int);
  31. void insert_rear(Plink,stu);
  32. void find_age(Plink,int);
  33. void find_age_id(Plink,int);
  34. #endif
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表