Skip to content

1707004748 王美行 #97

@0INVEST1

Description

@0INVEST1
#define _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include"stdlib.h"
#include<string.h>
#define MAXSIZE 50
#define M 20
typedef struct {
	int key;
}record;
typedef struct {
	char cardID[M];//卡号
	char name[M];//姓名
	char major[M];//专业
	char classnum[M];//班号
}recordtype;
typedef struct {
	recordtype r[MAXSIZE];
	int length;
}table;

void read(table *tab, char *filename)//读取所有人的借书信息
{
	int i, j, k, n;
	FILE *fp;
	fp = fopen(filename, "r");
	if (fp)
	{
		fscanf(fp, "%d", &tab->length);//读取所有学生借书证个数
		for (i = 1; i <= tab->length; i++)
		{
			fscanf(fp, "%s", &tab->r[i].cardID);
			fscanf(fp, "%s", &tab->r[i].name);
			fscanf(fp, "%s", &tab->r[i].major);
			fscanf(fp, "%s", &tab->r[i].classnum);
		}
		printf("读取文件信息成功!");
	}
	else printf("读取文件失败!");
	fclose(fp);//关闭文件
}
void output(table *tab)
{
	int i;
	if (tab->length != 0)
	{
		printf("输出所有的学生信息:\n");
		printf("%s%13s%12s%18s\n", "借书卡号", "专业", "姓名", "班级号");
		for (i = 1; i <= tab->length; i++)
			printf("%5s%17s%12s%17s\n", tab->r[i].cardID, tab->r[i].major, tab->r[i].name, tab->r[i].classnum);
	}
	else
		printf("借书证系统还没有借书记录!!\n");
}

//对班号进行插入排序
void insertsort(table *tab)
{
	int i, j;
	for (i = 1; i <= tab->length; i++) 
	{
		j = i - 1;
		tab->r[0] = tab->r[i];  
		while (strcmp(tab->r[0].classnum, tab->r[j].classnum) < 0)  
		{
			tab->r[j + 1] = tab->r[j];  
			j = j - 1; 
		}
		tab->r[j + 1] = tab->r[0]; 
	}
}
//对卡号进行插入排序
void insertsort2(table *tab)
{
	int i, j;
	for (i = 1; i <= tab->length; i++)  
	{
		j = i - 1;
		tab->r[0] = tab->r[i]; 
		while (strcmp(tab->r[0].cardID, tab->r[j].cardID) < 0)   
		{
			tab->r[j + 1] = tab->r[j];  
			j = j - 1;  
		}
		tab->r[j + 1] = tab->r[0];  
	}
}

void sort(table *tab)
{
	int input = 0;    //输入想选择的步骤
	printf("\n\t1.借书证卡号\n");
	printf("\t2.班号\n");
	printf("请输入你想排序的编号:");
	scanf("%d", &input);
	switch (input)
	{
	case 1:
		insertsort2(tab);//对借书证卡号进行选择排序
		output(tab);
		printf("借书证卡号排序成功!!\n\n");
		break;
	case 2:
		insertsort(tab);//对班号进行插入排序
		output(tab);
		printf("班号排序成功!!\n\n");
	default:
		break;
	}
}
int search_cardnum(table *tab, char *key)
{
	int low = 1, high = tab->length, mid;
	while (low <= high)
	{
		mid = (low + high) / 2;  //开始二分
		//puts(tab->r[mid].cardnumber);
		if (strcmp(tab->r[mid].cardID, key) == 0)  //检索成功返回
			return mid;
		else if (strcmp(tab->r[mid].cardID, key) > 0)
			high = mid - 1;       //继续在前半部分进行二分检索
		else
			low = mid + 1;        //继续在后半部分进行二分检索
	}
	return -1;
}
//专业的筛选
void search_major(table *tab, char *major)
{
	int count = 0; //用于记录该专业借书证个数
	int k = tab->length;
	int i = 1;
	while (k >= 0)
	{
		if (strcmp(tab->r[k].major, major) == 0)
		{
			count++;
			if (i == 1)
			{
				printf("------所有借书信息-----\n");
				printf("借书卡号    姓 名       专 业      班号\n");
				i = 0;
			}
			printf("%s%15s%10s%10s", tab->r[k].cardID, tab->r[k].name,
				tab->r[k].major, tab->r[k].classnum);
			printf("\n");
		}
		k--;
	}
	if (count == 0)
		printf("该专业暂时没有借书信息!\n");
}
void search(table *tab)
{
	int result = -1;
	int c = 0;
	char brow[M] = "";
	char major[M] = "";
	printf("\n\t1.借书证号查询");
	printf("\n\t2.专业查询");
	printf("\n请选择你需要查找的信息:");
	scanf("%d", &c);
	switch (c)
	{
	case 1://借书证卡号查询
	{
		getchar();
		printf("\n请输入你需要查找的借书证卡号:");
		scanf("%s", brow);
		printf("\n查找结果:");
		result = search_cardnum(tab, brow);
		if (result != -1)
		{
			printf("借书卡号   姓 名   专 业       班号\n");
			printf("%14s%13s%10s%8s", tab->r[result].cardID, tab->r[result].name,
				tab->r[result].major, tab->r[result].classnum);
			printf("\n");
		}
		else
			printf("\n没有找到该书信息!");
		break;
	}
	case 2:
	{
		getchar();
		printf("请输入想要筛选的专业:\n");
		scanf("%s", major);
		search_major(tab, major);
	}
	default:
		break;
	}
}
int main()
{
	int c = 0; //键盘键入的操作数
	char filename[30] = "a.txt";
	table tab;
	tab.length = 0;
	while (1)
	{
		printf("\n");
		printf("\t借书证信息系统\n");
		printf("****************************************************\n");
		printf("***********\t1.从文件读取信息\t************\n");
		printf("***********\t2.对信息进行排序\t************\n");
		printf("***********\t3.查找借书证信息\t************\n");
		printf("***********\t4.输出所有借书证信息\t********\n");
		printf("****************************************************\n");
		printf("请输入操作序号:");
		scanf("%d", &c);
		switch (c)
		{
		case 1:
			read(&tab, filename);
			output(&tab);
			break;
		case 2:
			sort(&tab);
			break;
		case 3:
			search(&tab);

			break;
		case 4:
			output(&tab);
			printf("\n");
			break;
		default:
			printf("输入了错误的操作数!!\n");
			break;
		}
	}
	system("pause");
	return 0;
}

default

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions