文章目录

  • 前言
  • 一、具体过程
    • 1.引入头文件contact.h
    • 2.创建test.c
    • 3.创建contact.c
  • 二、写在最后

前言

链表的学生管理系统相比之前更高效,同样有内存的扩充,也补充了文件操作,让我们输入的数据能够保存在文本里,实现我们想要的结果。

一、具体过程

1.引入头文件contact.h

//默认存放3个人的信息,进行扩容时,每次增加2个空间#define DEFAULT_SZ 3//默认容量大小
#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TELE 12
#define MAX_ADDR 30
#define MAX_NUM  10
#define MAX_BIRTH 20
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
enum Option
{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT,SAVE
};
typedef struct Node
{char num[MAX_NUM];//学号char name[MAX_NAME];//姓名char sex[MAX_SEX];//性别char class[MAX_BIRTH];//班级char addr[MAX_ADDR];//宿舍号int score;//成绩struct Node* next;
}node;
node list;//链表
void Add();
void Show();
void Delete();//删除指定的联系人
void Search();
node* Find(node* m, char n[]);
void Modify();
void Sort();
int Save();//保存
int Load();
int sort_function(node e1, node e2);
void del_function(node* i);

2.创建test.c

这里完成我们的主体内容
头文件引我们自己创建的contact.h

代码如下(示例):

#include "function.h"
void menu()
{printf("****************************************\n");printf("******     1.add        2.del     ******\n");printf("******     3.search     4.modify  ******\n");printf("******     5.show       6.sort    ******\n");printf("******     7.save       0.exit    ******\n");printf("****************************************\n");
}
int main()
{int input = 0;Load(&list);do{menu();printf("请选择:>");scanf_s("%d", &input);switch (input){case ADD:Add(&list);break;case DEL:Del(&list);break;case SEARCH:Search(&list);break;case MODIFY:Modify(&list);break;case SHOW:Show(&list);break;case SORT:Sort(&list);break;case SAVE:Save;break;case EXIT:Save(&list);printf("退出学生管理系统\n");break;default:printf("输入错误\n");break;}} while (input);return 0;
}

然后,重点来了,接下来就是我们每个部分的函数部分。

3.创建contact.c

这里就重点完成我们的函数部分,话不多说,直接上代码
开始也是先引我们自己的contact.h头文件

#include "function.h"
int Load(node* p)
{FILE* pfread = fopen("contact.data", "rb");if (pfread == NULL){printf("LoadContact: %s\n", strerror(errno));return 0;}node j;node* k;node* l = p;while (fscanf(pfread,"%s %s %s %s %s %d", j.num, j.name, j.sex, j.class, j.addr, &j.score)!=EOF){k = (node*)malloc(sizeof(node));*k = j;l->next = k;l = k;l->next = NULL;}return 1;
}
void Add(node* L)
{node s;//结点node* st = L;printf("请输入学号:>");scanf("%s", s.num);printf("请输入名字:>");scanf("%s", s.name);printf("请输入性别:>");scanf("%s", s.sex);printf("请输入班级:>");scanf("%s", s.class);printf("请输入宿舍号:>");scanf("%s", s.addr);printf("请输入成绩:>");scanf("%d", &s.score);node* p = (node*)malloc(sizeof(node));*p = s;//输入的数据p->next = st->next;st->next = p;//头插法Save(L);printf("添加成功\n");
}void Show(node* L)
{node* p = L->next;printf("________________________________________________________________\n");printf("|学号\t|姓名\t|性别\t|班级\t|宿舍号\t|成绩\t|\n");printf("________________________________________________________________\n");if (p != NULL){while (p != NULL){printf("________________________________________________________________\n");printf("%s|%s\t|%s\t|%s\t|%s\t|%d\t|\n", p->num, p->name, p->sex, p->class, p->addr,p->score);printf("________________________________________________________________\n");p = p->next;}}
}void Search(node* o)
{char Num[MAX_NUM];printf("请输入你想要查找人的学号:");scanf("%s", Num);node* u = Find(o,Num);if (u == NULL){printf("查无此人!\n");}else{u = u->next;printf("%20s\t %10s\t %10s\t %10s\t %15s\t %10s\n", "学号", "名字", "性别", "班级", "宿舍号", "成绩");printf("%21s\t %10s\t %10s\t %9s\t %18s\t %10s\n",u->num,u->name,u->sex,u->class,u->addr,u->score);}
}
node* Find(node* m, char n[])
{node* p = m;while (p->next != NULL){if (strcmp(p->next->num, n) == 0){return p;}p = p->next;}return NULL;
}void Del(node *L)
{char Num[MAX_NUM];printf("请输入你想要删除的人的学号:");scanf("%s", Num);node* u = Find(L, Num);node* z = u;if (u == NULL){printf("要删除的人不存在!\n");}else{u = u->next;printf("%20s\t %10s\t %10s\t %10s\t %15s\t %10s\n", "学号", "名字", "性别", "班级", "宿舍号", "成绩");printf("%21s\t %10s\t %10s\t %9s\t %18s\t %10d\n", u->num, u->name, u->sex, u->class, u->addr, u->score);del_function(z);Save(L);printf("删除成功\n");}
}
void del_function(node* i)
{node* j = i->next;i->next = j->next;j->next = NULL;free(j);
}
void Modify(node* i)
{char Num[MAX_NUM];printf("请输入你想要查找人的学号:");scanf("%s", Num);node* u = Find(i, Num);if (u == NULL){printf("查无此人!\n");}else{u = u->next;printf("%20s\t %10s\t %10s\t %10s\t %15s\t %10s\n", "学号", "名字", "性别", "班级", "宿舍号", "成绩");printf("%21s\t %10s\t %10s\t %9s\t %18s\t %10d\n", u->num, u->name, u->sex, u->class, u->addr, u->score);printf("*******  1 -------修改学号   *******\n");printf("*******  2 -------修改姓名   *******\n");printf("*******  3 -------修改性别   *******\n");printf("*******  4 -------修改班级   *******\n");printf("*******  5 -------修改宿舍号 *******\n");printf("*******  6 -------修改成绩   *******\n");int  m = 0;while (1){printf("请选择你要修改的信息:");scanf("%d", &m);switch (m){case 1:printf("学号:");scanf("%s", u->num);break;case 2:printf("姓名:");scanf("%s", u->name);break;case 3:printf("性别:");scanf("%s", u->sex);break;case 4:printf("班级:");scanf("%s", u->class);break;case 5:printf("宿舍号:");scanf("%s", u->addr);break;case 6:printf("成绩:");scanf("%d", &u->score);break;}printf("是否要继续修改?yes(1)/no(0):");scanf("%d", &m);if (m == 0){break;}}}Save(i);
}int Save(node* p)
{FILE* pfWrite = fopen("contact.data", "wb");if (pfWrite == NULL){printf("SaveContact: %s\n", strerror(errno));return 0;}//写系统中的数据到文件中node* t = p->next;while (t != NULL){fprintf(pfWrite,"%s %s %s %s %s %d\n", t->num,t->name, t->sex, t->class, t->addr, t->score);t = t->next;}printf("保存成功\n");return 1;
}
void Sort(node* L)
{printf("按成绩从高到底排序");for (node* j = L->next; j != NULL; j = j->next){for (node* k = j; k != NULL; k = k->next){if (sort_function(*j, *k) != 0){node m = *j;*j = *k;*k = m;m.next = j->next;j->next = k->next;k->next = m.next;}}}Save(L);
}
int sort_function(node e1, node e2)
{return e1.score < e2.score;
}

二、写在最后

链表版的管理系统如上,有什么不足的地方欢迎大家指出!

学生管理系统(链表)相关推荐

  1. C程序范例(2)——学生管理系统”链表“实现

    1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现.虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序.所以大家不必要担心.在这里与大家 ...

  2. 【6】C++语法与数据结构之STL_list学生管理系统_链表外排序_函数指针

    本文通过STL类库的list数据结构来完成学生管理系统,采用链表外排序,通过函数指针实现. 注意:此时排序规则函数定义为类静态成员函数,等价于全局函数 函数指针定义为 BY_FUNC ps[] = { ...

  3. 【5】C++语法与数据结构之STL_list学生管理系统_链表内排序_函数指针

    本文通过STL类库的list数据结构来完成学生管理系统,采用链表内排序,通过list类库自带sort函数进行排序. 注意:此时排序规则函数定义为类静态成员函数,等价于全局函数 函数指针定义为 BY_F ...

  4. C语言实用算法系列之学生管理系统_单向链表内操作_选择排序

    单向链表实现 #include <stdio.h> #include <malloc.h>typedef int DATA;struct SNode {DATA data;SN ...

  5. java用链表做学生系统_C语言链表实现学生管理系统

    本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include #include usin ...

  6. c语言用链表实现成绩管理系统,C语言写的学生成绩管理系统(链表)

    <C语言写的学生成绩管理系统(链表)>由会员分享,可在线阅读,更多相关<C语言写的学生成绩管理系统(链表)(6页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...

  7. C++单链表学生管理系统(有登录界面)

    C++单链表 学生管理系统 这个程序是我好几天的心血,欢迎大家指正!!! 该程序需要新建三个txt文件.1.login.txt用来存放注册用户的用户名与密码. 2.login2.txt用于登录时将lo ...

  8. c语言数据结构_链表的应用——学生管理系统

    一个比较完整的学生管理系统,采用文件存储. 先上图片 源码: #include <stdio.h> #include <stdlib.h> #include <strin ...

  9. 学生管理系统 C语言 动态链表 结构体 文件操作 设置密码 输入密码回显星号

    C语言 学生管理系统代码 实现功能 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名.学号.专业.  性别.年龄.   电话.家庭住址.还可以继续拓展 系统要求实现以下功能: 1.输入功能: ...

最新文章

  1. 一款超炫酷后台权限管理系统
  2. Towards a topological-geometrical theory of group equivariant non-expansive operators for data analy
  3. Java的Kafka:构建安全,可扩展的消息传递应用程序
  4. 不用第三方插件如何统计自己wordpress的访问量
  5. erlang安装_RabbitMQ的使用(一)- RabbitMQ服务安装
  6. 从零开始学Pytorch(十七)之目标检测基础
  7. Pandas读取数据内存优化
  8. Silverlight 与 WPF 的一些差异
  9. Android基础控件TextClock和Chronometer的使用
  10. 基于VHDL的vivado2017.4使用教程
  11. php桌面快捷方式图标,window_Win10桌面图标没了怎么办?Win10桌面快捷方式消失了解决方法,不少使用windows10系统的朋友都 - phpStudy...
  12. 如何书写论文中的参考文献并正确标注页码
  13. 气动隔膜阀的工作原理
  14. python 通达信数据_如何利用程序(如python) 从新浪财经或者雅虎财经获取到所有A股数据(历史日线数据,实时股票数据)?...
  15. 【JS】每日一题:模块化
  16. 计算机网络DNS域名解析协议详解
  17. 理解线性代数,矩阵运算,行列式
  18. 【机器学习】生成式模型和判别式模型
  19. linux下批量更改一个目下的目录和文件的权限
  20. 用python画枫叶代码-Python自定义函数基础

热门文章

  1. 机械过滤器(石英砂过滤器)和多介质过滤器的区别
  2. 优秀网页翻译:DS3231与 PCF2129 RTC比较
  3. Nginx-正向代理HTTPS
  4. 关于最大公约数和最小公约数
  5. 计算机网络之7层协议
  6. Webpack 的 Chunk,想怎么分就怎么分
  7. 安装hadoop 问题记录
  8. 深度解读Coatue:向加密行业转舵的「老虎环球基金」
  9. ArangoDB——图遍历 Graph
  10. 怎么样将视频转换成gif?