学生管理系统(链表)
文章目录
- 前言
- 一、具体过程
- 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;
}
二、写在最后
链表版的管理系统如上,有什么不足的地方欢迎大家指出!
学生管理系统(链表)相关推荐
- C程序范例(2)——学生管理系统”链表“实现
1.对于学生管理系统,能够实现的方法有许多,但是今天我们用链表的方法来实现.虽然初学者很可能看不懂,但是不要紧,这是要在整体的系统的学习完C语言之后,我才编写出的程序.所以大家不必要担心.在这里与大家 ...
- 【6】C++语法与数据结构之STL_list学生管理系统_链表外排序_函数指针
本文通过STL类库的list数据结构来完成学生管理系统,采用链表外排序,通过函数指针实现. 注意:此时排序规则函数定义为类静态成员函数,等价于全局函数 函数指针定义为 BY_FUNC ps[] = { ...
- 【5】C++语法与数据结构之STL_list学生管理系统_链表内排序_函数指针
本文通过STL类库的list数据结构来完成学生管理系统,采用链表内排序,通过list类库自带sort函数进行排序. 注意:此时排序规则函数定义为类静态成员函数,等价于全局函数 函数指针定义为 BY_F ...
- C语言实用算法系列之学生管理系统_单向链表内操作_选择排序
单向链表实现 #include <stdio.h> #include <malloc.h>typedef int DATA;struct SNode {DATA data;SN ...
- java用链表做学生系统_C语言链表实现学生管理系统
本文实例为大家分享了C语言链表实现学生管理系统的具体代码,供大家参考,具体内容如下 #include #include #include #include #include #include usin ...
- c语言用链表实现成绩管理系统,C语言写的学生成绩管理系统(链表)
<C语言写的学生成绩管理系统(链表)>由会员分享,可在线阅读,更多相关<C语言写的学生成绩管理系统(链表)(6页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...
- C++单链表学生管理系统(有登录界面)
C++单链表 学生管理系统 这个程序是我好几天的心血,欢迎大家指正!!! 该程序需要新建三个txt文件.1.login.txt用来存放注册用户的用户名与密码. 2.login2.txt用于登录时将lo ...
- c语言数据结构_链表的应用——学生管理系统
一个比较完整的学生管理系统,采用文件存储. 先上图片 源码: #include <stdio.h> #include <stdlib.h> #include <strin ...
- 学生管理系统 C语言 动态链表 结构体 文件操作 设置密码 输入密码回显星号
C语言 学生管理系统代码 实现功能 功能:学生管理系统设计,每个学生信息作为一条记录,包括姓名.学号.专业. 性别.年龄. 电话.家庭住址.还可以继续拓展 系统要求实现以下功能: 1.输入功能: ...
最新文章
- 一款超炫酷后台权限管理系统
- Towards a topological-geometrical theory of group equivariant non-expansive operators for data analy
- Java的Kafka:构建安全,可扩展的消息传递应用程序
- 不用第三方插件如何统计自己wordpress的访问量
- erlang安装_RabbitMQ的使用(一)- RabbitMQ服务安装
- 从零开始学Pytorch(十七)之目标检测基础
- Pandas读取数据内存优化
- Silverlight 与 WPF 的一些差异
- Android基础控件TextClock和Chronometer的使用
- 基于VHDL的vivado2017.4使用教程
- php桌面快捷方式图标,window_Win10桌面图标没了怎么办?Win10桌面快捷方式消失了解决方法,不少使用windows10系统的朋友都 - phpStudy...
- 如何书写论文中的参考文献并正确标注页码
- 气动隔膜阀的工作原理
- python 通达信数据_如何利用程序(如python) 从新浪财经或者雅虎财经获取到所有A股数据(历史日线数据,实时股票数据)?...
- 【JS】每日一题:模块化
- 计算机网络DNS域名解析协议详解
- 理解线性代数,矩阵运算,行列式
- 【机器学习】生成式模型和判别式模型
- linux下批量更改一个目下的目录和文件的权限
- 用python画枫叶代码-Python自定义函数基础