学生管理系统

这是一个常见的基本的管理系统,是模拟学校的管理机制,
分为三个模块:管理员、老师、学生。
管理员负责对老师进行管理,老师负责对学生进行管理,
学生则是对自己的基本信息的一些查询。

主要的一些功能是用链表的方式来完成,所以封装了一个通用链表。

链表的封装

list.h的代码段

#ifndef LIST_H
#define LIST_H

#include<stdio.h>
#include<stdbool.h>

typedef struct Node
{
   
   
	void* ptr;
	struct Node* next;
}Node;
//封装通用链表

typedef struct List
{
   
   
	Node* head;
	Node* tail;
	size_t size;
}List;

//定义比较函数指针类型
typedef int (*Cmpfp)(void*,void*);

//创建节点
Node* create_node(void* ptr);
//创建链表
List* create_list(void);
//销毁链表
void destroy_list(List* list);
//头添加
void add_head_list(List* list,void* ptr);
//尾添加
void add_tail_list(List* list,void* ptr);
//头删除
bool del_head_list(List* list);
//尾删除
bool del_tail_list(List* list);
//表删除
bool del_list(List* list,void* ptr,Cmpfp func);
//修改
bool modify_list(List* list,void* old,void* ptr,Cmpfp func);
//查询
Node* find_list(List* list,void* ptr,Cmpfp func);
//遍历
void show_list(List* list,void(*func)(void* ptr));
//排序
void sort_list(List* list,Cmpfp func);

#endif  //LIST_H

list.c

#include<stdlib.h>
#include<string.h>
#include"list.h"

//创建节点
Node* create_node(void* ptr)
{
   
   
	Node* node = malloc(sizeof(Node));
	node->ptr = ptr;
	node->next = NULL;
	return node;
}

//创建链表
List* create_list(void)
{
   
   
	List* list = malloc(sizeof(List));
	list->head = NULL;
	list->tail = NULL;
	list->size = 0;
	return list;
}

//销毁链表
void destroy_list(List* list)
{
   
   
	if(NULL == list || NULL ==list->head) return;
	Node* prev = list->head;
	while(NULL !=prev->next)
	{
   
   
		Node* temp = prev;
		prev = prev->next;
		free(temp->ptr);
		free(temp);
	}
	free(prev->ptr);
	free(prev);
	free(list);
}

//头添加
void add_head_list(List* list,void* ptr)
{
   
   
	Node* node = create_node(ptr);
	if(NULL ==list->head)
	{
   
   
		list->head = node;
		list->tail = node;
	}
	else
	{
   
   
		node->next = list->head;
		list->head = node;
	}
	list->size++;
}
//尾添加
void add_tail_list(List* list,void* ptr)
{
   
   
	Node* node = create_node(ptr);
	if(NULL == list->tail)
	{
   
   
		list->head = node;
		list->tail = node;
	}
	else
	{
   
   
		list->tail->next = node;
		list->tail = node;
	}
	list->size++;
}

//头删除
bool del_head_list(List* list)
{
   
   
	if(NULL == list->head) return false;
	Node* node = list->head;
	list->head = node->next;
	list->size--;
	free(node->ptr);
	free(node);

	if(0 == list->size) list->tail = NULL;
	return true;
}

//尾删除
bool del_tail_list(List* list)
{
   
   
	if(NULL ==list->tail) return false;
	if(1==list->size) return del_tail_list(list);

	Node* prev = list->head;
	while(prev->next != list->tail) prev = prev->next;
	
	list->tail = prev;
	free(prev->next->ptr);
	free(prev->next);
	prev->next = NULL;
	list->size--;
	return true;
}


//表删除
bool del_list(List* list,void* ptr,Cmpfp func)
{
   
   
	if(0 == func(list->head->ptr,ptr)) return del_head_list(list);
	if(0 == func(list->tail->ptr,ptr)) return del_tail_list(list);

	Node* prev = list->head;
	while(NULL !=prev->next)
	{
   
   
		if(0 == func(prev->next->ptr,ptr))
		{
   
   
			Node* node = prev->next;
			prev->next = node->next;
			free(node->ptr);
			free(node);
			list->size--;
			return true;
		}
		prev = prev->next;
	}
	return false;

}

//修改
bool modify_list(List* list,void* old,void* ptr,Cmpfp func)
{
   
   
	for(Node* node =list->head;NULL !=node;node=node->next)
	{
   
   
		if(0 == func(node->ptr,old))
		{
   
   
			free(node->ptr);
			node->ptr = ptr;
			return true;
		}
	}
	return false;
	
}

//查询
Node* find_list(List* list,void* ptr,Cmpfp func)
{
   
   
	for(Node* node = list->head;NULL!=node;node=node->next)
	{
   
   
		if(0==func(node->ptr,ptr))
		{
   
   
			return node;
		}
	}
	return NULL;
}

//遍历
void show_list(List* list,void(*func)(void* ptr))
{
   
   
	for(Node* node = list->head;NULL!=node;node = node->next)
	{
   
   
		func(node->ptr);
	}
}

//排序
void sort_list(List* list,Cmpfp func)
{
   
   
	Node* max = list->tail;
	while(max !=list->head)
	{
   
   
		bool flag =true;
		Node* node = list->head;
		while(NULL !=node)
		{
   
   
			if(1==func(node->ptr,node->next->ptr))
			{
   
   
				void *temp = node->ptr;
				node->ptr = node->next->ptr;
				node->next->ptr=temp;
				flag = false;
			}
			if(node->next ==max)
			{
   
   
				max=node;
				break;
			}
			node=node->next;
		}
		if(flag) break;
	}
}

main函数代码

#include"sams.h"
int main()
{
   
   
	sams_init();
	sams_start();
}

文件读取

dao.h

#ifndef DAO_H
#define DAO_H
#include"list.h"

//文件加载数据到链表
void load_data(List* list,const char* file,size_t size);

//把链表中的数据保存到文件
void save_data(List* list
登陆的代码如下 package denglu; import java.awt.Color; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.plaf.basic.BasicButtonUI; import com.swtdesigner.SwingResourceManager; public class DengLu extends JFrame{ private JPasswordField pass; private static JTextField name; public void DengLu() { this.setTitle("登入窗口"); //设置登入窗口的属性参数 getContentPane().setLayout(null); setSize(453, 317); final JLabel label = new JLabel(); label.setHorizontalAlignment(SwingConstants.CENTER); label.setForeground(new Color(128, 128, 0)); label.setFont(new Font("华文彩云", Font.BOLD, 48)); label.setText("学生管理系统"); label.setBounds(0, 0, 447, 77); getContentPane().add(label); final JLabel label_1 = new JLabel(); label_1.setForeground(new Color(128, 128, 0)); label_1.setFont(new Font("", Font.BOLD, 22)); label_1.setText("用 户 名:"); label_1.setBounds(56, 101, 122, 32); getContentPane().add(label_1); final JLabel label_1_1 = new JLabel(); label_1_1.setForeground(new Color(255, 255, 255)); label_1_1.setFont(new Font("", Font.BOLD, 22)); label_1_1.setText("密 码:"); label_1_1.setBounds(56, 154, 122, 32); getContentPane().add(label_1_1); name = new JTextField();//用户名输入框 name.setBounds(205, 105, 155, 32); getContentPane().add(name); pass = new JPasswordField();//密码输入框 pass.setBounds(205, 158, 155, 32); pass.addKeyListener(new Key());//添加键盘监听 getContentPane().add(pass); final JButton button_1 = new JButton(); button_1.setForeground(new Color(255, 255, 255)); //设置按钮的事件处理 button_1.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent arg0) { /*String s
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值