C语言读者管理系统——软件项目开发实践

一、功能

浏览、增加、查询、修改、挂失
在这里插入图片描述

二、分析

核心是内存、文件的同步
在这里插入图片描述
这里内存是指数据存储方式,本项目以链表存储数据。也可以用数据结构时学习的链表,这里采用STL下的 list 库。

首先从文件中利用 fscanf 读取信息存入链表;
⛳️浏览:直接打印链表;
🚤增加:采用尾插入链表,同时更新文件,利用 fprintf 写入数据到文件末尾
⛵️查询:利用 for(reader r:L) 遍历链表 (ps:由于结点是结构体,目前本人只找到这种方式遍历);
🚣修改、挂失:对链表的修改都是先删除某结点(erase)再插入(insert),而文件的修改只能重写文件,即将链表 fprintf 进文件,实现内存与文件同步。

本程序的🚥难点在于STL的 list 与结构体的结合,其中涉及到迭代器(ps:对list的修改必须使用迭代器)。

三、代码

//读者管理系统 编译环境:vs 2019
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
using namespace std;
#include <list>	//C++下的
#include <stdlib.h>

typedef struct reader {
   
	char code[20];		//证件号
	char name[30];		//姓名
	char sex[5];		//性别
	char dept[50];		//系别
	int tag;			//证件状态
	int num;			//下标,如果通过r:L是做不到的,只能迭代访问,不能改变值
}reader;

list<reader> L;					//每个节点都是reader类型
list<reader>::iterator it;		//迭代器
reader line;					//读取文件时,每一行都是一个reader
reader temp;
reader findit;					//查找读者时,记录读者					
int flag = 0;

void menu();
void show();
void UpdateFile();
void BrowseReader();
void ModifyReader();
void in(reader r);
int SelectMenu();
int cmp(char a[], char b[]);

//增加读者
void InputReader();				//录入读者信息,建立读者信息的链表
void SaveReader();				//将读者信息链表,保存到reader.txt文件中

//查询读者
int Find_Code();				//按照证件号查找
int Find_Name();				//按照姓名查找

int main()
{
   
	FILE* fp = fopen("reader.txt", "r");		//r权限
	for (int i=0; ;i++ )
	{
   	//每个读者相当于一个结点,读入链表中
		if (~fscanf(fp, "%s%s%s%s%d", line.code, line.name, line.sex, line.dept, &line.tag))	//对于文件,如果不为空,则读取到结点
		{
   
			line.num = i;		//下标</
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值