[ --> C Language<-- ] employee信息添加,删除,列表的示例程序

// Test.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
 int empno;
 char * empname;
 char * gender;
}Data_t;

struct Node_t{
 Data_t data;
 Node_t *next;
};

typedef struct Node_t NODE;

void addEmp(NODE *head){

 printf("==========> Input new employee's information <==========/n");

 int empno;
 char name[20];
 char gender[2];

 printf("Input emp no:");
 scanf("%d",&empno);
 printf("emp name:");
 scanf("%s",name);
 printf("emp gender:");
 scanf("%s",gender);
 printf("/n");

 NODE *n=(NODE *)malloc(sizeof(NODE));
 n->data.empno=empno;
 //n->data.empname=(char *)malloc(strlen(name));  原来是这里有问题。
 n->data.empname=(char *)malloc(strlen(name)+1);
 strcpy(n->data.empname,name);
 //n->data.gender=(char *)malloc(strlen(gender));
 n->data.gender=(char *)malloc(strlen(gender)+1);
 strcpy(n->data.gender,gender);
 n->next=NULL;

 NODE *p=head->next;
 NODE *lastN=head;
 while(p!=NULL){
  if(p->data.empno == empno){
   printf("OUCH!!!/nDuplicate Empno!/nPlease check your input./n/n");
   break;
  }

  if(p->data.empno > empno){
   lastN->next=n;
   n->next=p;
   //insert the new emp and then return
   return;
  }
  lastN=p;
  p=p->next;
 }
 //add an emp at the end
 lastN->next=n;
}

void reverseOrder(NODE * head){
 NODE *p=head->next;
 NODE *lastN=NULL;
 NODE *nextN=NULL;
 while(p!=NULL){
  nextN=p->next;
  p->next=lastN;
  lastN=p;
  p=nextN;
 }
 head->next=lastN;
}

void listEmps(NODE *head){

 if(head->next==NULL){
  printf("--------> No data yet. <-----------/n/n");
  return;
 }
Choice:
 printf("Please Choose Output Order: /n");
 printf("1: Ascending /n");
 printf("2: Descending /n");
 printf("Choice:");
 
 //this array must be big enough to contain possible wrong input

 char input[100];
 scanf("%s",input);
 int order=atoi(input);
 printf("/n");

 if(order==1){
  printf("--------> Asecending Employees List : <---------/n");
  NODE *p=head->next;
  while(p!=NULL){
   printf("Employee No. :%d/n",p->data.empno);
   printf("Employee Name :%s/n",p->data.empname);
   printf("Employee Gender :%s/n/n",p->data.gender);
   p=p->next;
  }
 }else if(order==2){
  printf("--------> Descending Employees List : <---------/n");
  reverseOrder(head);
  NODE *p=head->next;
  while(p!=NULL){
   printf("Employee No. :%d/n",p->data.empno);
   printf("Employee Name :%s/n",p->data.empname);
   printf("Employee Gender :%s/n/n",p->data.gender);
   p=p->next;
  }
  reverseOrder(head);
 }else{
  printf("Invalid choice!/n");
  goto Choice;
 }
}

int delEmp(NODE *head){
 int delempno=0;
 printf("Please enter the employ's empno:");
 scanf("%d",&delempno);
 printf("/n");

 NODE *lastN=head;
 NODE *p=head->next;
 while(p!=NULL){
  if(p->data.empno==delempno){
   lastN->next=p->next;
   free((p->data).empname);
   free((p->data).gender);
   p->next=NULL;
   free(p);
   p=NULL;
   return 1;
  }
  lastN=p;
  p=p->next;
 }
 //no emp with the specified empno
 return 0;

}

void main(){
 char input[3]="-1";
 NODE *head=(NODE *)malloc(sizeof(NODE));
 head->next=NULL;

 printf("##### Welcome! #####/n");
 printf("Menu:/n");
 printf("1. Add new employee;/n");
 printf("2. Delete an employee;/n");
 printf("3. List all employees;/n");
 printf("4. Exit./n");
 
 while(1==1){
 printf("Please enter a choice:");
 scanf("%s",input);
 int choice = atoi(input);
 
 switch(choice){
 case 1:
  addEmp(head);
  break;
 case 2:
  if(delEmp(head)==0){
   printf("OUCH!!!/nNo employee with the specified empno./nPlease check your input!/n/n");
  }
  break;
 case 3:
  listEmps(head);
  break;
 case 4:
  return;
 default:
  printf("Invalid choice!/n/n");
  break;
 }
 }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值