⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 user.c

📁 一个自己编写的双向链表的C语言实现程序
💻 C
字号:
/* user.c - user */
/* Copyright (c) 2007 Alpha Networks, Inc. */
/** modification history** 07/02/2007, created by Ped
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lstLib.h"
#include "user.h"

static USER *userGet(LIST *pUserList, char *pUserName)
{
	USER *pUser;

	for(pUser = (USER *)lstFirst(pUserList); 
		pUser != NULL;
		pUser = (USER *)lstNext((NODE *)pUser))
	{
		if(strcmp(pUser->name, pUserName) == 0)
			return pUser;
	}

	return NULL;
}

/* return 0 success, -1 fail */
static int userAdd(LIST *pUserList, char *pUserName)
{
	USER *pUser;
	int ret = -1;

	if(userGet(pUserList, pUserName) != NULL)
	{
		printf("USER: user %s already exist\n", pUserName);
		goto end;
	}
	
	pUser = (USER *)calloc(1, sizeof(USER));

	if(pUser == NULL) {
		printf("USER: error to get memory\n");
		goto end;
	}

	strcpy(pUser->name, pUserName);
	lstAdd(pUserList, (NODE *)pUser);
	ret = 0;
	
end:
	
	return ret;
}

/* return 0 success, -1 fail */
static int userDelete(LIST *pUserList, char *pUserName)
{
	USER *pUser;
	int ret = -1;

	pUser = userGet(pUserList, pUserName);

	if(pUser == NULL)
	{
		printf("USER: no user %s\n", pUserName);
		goto end;
	}
	
	lstDelete(pUserList, (NODE *)pUser);
	free(pUser);
	ret = 0;
	
end:
	
	return ret;
}

/* pUserName == NULL, show all user, else show the particular user */
static void userShow(LIST *pUserList, char *pUserName)
{
	USER *pUser;

	if(pUserName != NULL)
	{
		pUser = userGet(pUserList, pUserName);

		if(pUser == NULL)
			printf("USER: no user %s\n", pUserName);
		else
			printf("user %s\n", pUserName);
		
		return;
	}

	/* show all user */

	for(pUser = (USER *)lstFirst(pUserList); 
		pUser != NULL;
		pUser = (USER *)lstNext((NODE *)pUser))
	{
		printf("user %s\n", pUser->name);
	}
}

static void userUsage()
{
	printf("User usage:\n");
	printf("  1 - add an user\n");
	printf("  2 - delete an user\n");
	printf("  3 - show an user\n");
	printf("  4 - show all user\n");
	printf("  5 - quit\n");
}

int main(int argc, char **argv)
{
	LIST userList;
	int choice;
	char userName[MAX_USER_NAME_LEN];
	
	lstInit(&userList);
	userUsage();
	
	printf("?");
	scanf("%d", &choice);

	while(choice != 5)
	{
		switch(choice) {
		case 1:
			printf("Enter user name:");
			scanf("%s", userName);
			userAdd(&userList, userName);
			break;
		case 2:
			printf("Enter user name:");
			scanf("%s", userName);
			userDelete(&userList, userName);
			break;
		case 3:
			printf("Enter user name:");
			scanf("%s", userName);
			userShow(&userList, userName);
			break;
		case 4:
			userShow(&userList, NULL);
			break;
		default:
			printf("Invalid choice. \n");
			userUsage();
			break;
		}

		printf("?");
		scanf("%d", &choice);
	}

	printf("End of run.\n");
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -