课程设计:题目2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

void init_dlink(void);
void read_file(void);
void write_file(void);
void insert_item(void);
void search_item(void);
void sort_item(void);
void delete_item(void);
void print_item(void);
void modify_item(void);
void anykey(void);

typedef struct node *link;
struct node {
	char stu_id[10];
	char name[20];
	char sex[10];
	char _class[50];
	char major[50];
	char address[100];
	link prev, next;
};

link ptr, head, tail, current;
bool fFlag;

int main(void)
{
	char option1, option2;
	system("cls");
	init_dlink();
	read_file();
	while(1)
	{
		system("cls");
		printf("**********************************\n");
		printf("	1.添加新的通讯录\n");
		printf("	2.删除通讯录\n");
		printf("	3.查找信息\n");
		printf("	4.显示通讯录\n");
		printf("	5.修改通讯录\n");
		printf("	6.离开\n");
		printf("**********************************\n");
		printf(" 请输入你的选择 (1-5)...");
		option1 = getche();
		switch(option1)
		{
			case '1':
				fFlag = 1;
				insert_item();
				break;
			case '2':
				delete_item();
				break;
			case '3':
				search_item();
				break;
			case '4':
				print_item();
				break;
			case '5':
				modify_item();
				break;
			case '6':
				if (fFlag)
				{
					printf("\n");
					printf("是否保存修改? (Y or N)");
					option2 = getche();
					if(option2 == 'Y')
					{
						write_file();
						exit(0);
					}
					if(option2 = 'N')
						exit(0);
				}
				else
				{
					write_file();
					exit(0);
				}
		}
	}
}

void init_dlink(void)
{
	ptr = (link)malloc(sizeof *ptr);
	strcpy(ptr->stu_id, "0");
	strcpy(ptr->name, "0");
	strcpy(ptr->sex, "0");
	strcpy(ptr->_class, "0");
	strcpy(ptr->major, "0");
	strcpy(ptr->address, "0");
	ptr-> prev = ptr;
	ptr->next = ptr;
	head = ptr;
	tail = ptr;
}

void read_file(void)
{
	FILE *fptr;
	if((fptr = fopen("dlist.dat", "r")) == NULL)
	{
		printf(" 文件不存在!\n");
		printf(" 按任意键编辑第一个记录...\n");
		getch();
		insert_item();
	}
	else
	{
		ptr = (link)malloc(sizeof *ptr);
		while(fscanf(fptr, "%s %s %s %s %s %s", ptr->stu_id, ptr->name, ptr->sex, ptr->_class, ptr->major, ptr->address) != EOF)
		{
			if(strcmp(ptr->stu_id, " ") != 0)
			{
				sort_item();
				ptr = (link)malloc(sizeof *ptr);
			}
			else
				free(ptr);
		}
		fclose(fptr);
	}
}

void write_file(void)
{
	FILE *fptr;
	fptr = fopen("dlist.dat", "w");
	current = head->next;
	while(current != head)
	{
		fprintf(fptr, "%s %s %s %s %s %s\n", current->stu_id, current->name, current->sex, current->_class, current->major, current->address);
		current = current->next;
	}
	fclose(fptr);
}

void insert_item(void)
{
	system("cls");
	ptr = (link)malloc(sizeof *ptr);

	printf(" 姓名:");
	gets(ptr->stu_id);

	printf(" 电话:");
	gets(ptr->name);

	printf(" 性别:");
	gets(ptr->sex);

	printf(" 班级:");
	gets(ptr->_class);

	printf(" 专业:");
	gets(ptr->major);

	printf(" 地址:");
	gets(ptr->address);

	sort_item();
}

void sort_item(void)
{
	current = head->next;
	while(current != head)
	{
		if(strcmp(ptr->stu_id, current->stu_id) < 0)
		{
			ptr->next = current;
			ptr->prev = current->prev;
			current->prev->next = ptr;
			current->prev = ptr;
			break;
		}
		current = current->next;
	}
	if(head->next == head || current == head)
	{
		ptr->next = head;
		ptr->prev = head->prev;
		head->prev->next = ptr;
		head->prev = ptr;
		tail = ptr;
	}
}

void delete_item(void)
{
	char del_id[10];
	int count = 0;
	link clear;
	system("cls");
	if(head->next == head)
		printf(" 没有通讯录!\n");
	else
	{
		printf(" 请输入删除姓名:");
		gets(del_id);
		current = head->next;
		while(current->next != head)
		{
			if(strcmp(del_id, current->stu_id)==0)
			{
				count++;
				clear = current;
				current->prev->next = current->next;
				current->next->prev = current->prev;
				current = current->next;
				free(clear);
			}
			current = current->next;
		}
		if(strcmp(del_id, current->stu_id) == 0)
		{
			count++;
			clear = current;
			current->prev->next = head;
			head->prev = current->prev;
			tail = current->prev;
			free(clear);
		}
		if(count > 0)
			printf("已删除 %s 个信息\n", del_id);
		else
			printf(" 没有找到 %s \n", del_id);
	}
	anykey();
}

void search_item(void)
{
	char search_id[10];
	system("cls");
	if(head->next == head)
		printf(" 没有通讯录\n");
	else
	{
		printf(" 请输入查找姓名:");
		gets(search_id);
		current = head->next;
		while((current != head) && (strcmp(search_id, current->stu_id)!=0))
			current = current->next;
		if (current != head)
		{
			printf("--------------------------------------\n");
			printf(" 姓名: %s\n", current->stu_id);
			printf(" 电话: %s\n", current->name);
			printf(" 性别: %s\n", current->sex);
			printf(" 班级: %s\n", current->_class);
			printf(" 专业: %s\n", current->major);
			printf(" 地址: %s\n", current->address);
			printf("--------------------------------------\n");
		}
		else
			printf(" 没有找到 %s \n", search_id);
	}
	anykey();
}

void modify_item(void)
{
	int count = 0;
	char modify_id[10];
	system("cls");
	if(head->next == head)
		printf(" 没有通讯录\n");
	else
	{
		printf(" 请输入修改姓名:");
		gets(modify_id);
		current = head->next;
		while(current != head)
		{
			if(strcmp(modify_id, current->stu_id) == 0)
			{
				printf("******************************\n");
				printf(" 姓名: %s\n", current->stu_id);
				printf(" 电话: %s\n", current->name);
				printf(" 性别: %s\n", current->sex);
				printf(" 班级: %s\n", current->_class);
				printf(" 专业: %s\n", current->major);
				printf(" 地址: %s\n", current->address);
				printf(" 请输入新的班级:");
				gets(current->_class);
				printf(" 请输入新的专业:");
				gets(current->major);
				printf(" 请输入新的地址:");
				gets(current->address);
				count++;
			}
			current = current->next;
		}
		if(count > 0)
			printf("已修改 %d 个信息\n", count);
		else
			printf(" 没有找到 %s \n", modify_id);
	}
	anykey();
}


void print_item(void)
{
	int count = 0;
	system("cls");
	if(head->next == head)
		printf(" 没有通讯录\n");
	else
	{
		printf(" 姓名      QQ        性别     班级         专业          地址\n");
		printf("-------------------------------------------------------------------------------\n");
		current = head->next;
		while(current != head)
		{
			printf(" %-7s  %-12s  %-6s  %-12s  %-12s  %-s\n", current->stu_id, current->name, current->sex, current->_class, current->major, current->address);
			count++;
			current = current->next;
			if(count % 20 == 0)
				getch();
		}
		printf("-------------------------------------------------------------------------------\n");
		printf(" 总共 %d 个信息\n", count);
	}
	anykey();
}

void anykey(void)
{
	printf(" 请按任意键继续...");
	getch();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值