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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions