1. 程式人生 > >用C語言實現簡單的人員管理系統(續)

用C語言實現簡單的人員管理系統(續)

功能要求:

  • 使用C語言字元介面設計人員管理系統的選單介面;
  • 人員資訊有賬號、密碼、姓名、性別;
  • 要將人員資訊存入到“******.txt”中;
  • 還要能對人員資訊進行增、刪、查、改;
  • 查詢還要有模糊查詢的功能

標頭檔案、函式的宣告以及一些全域性變數的宣告:

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


#define N 2
int Number = N;

void bc(struct Link *st);//儲存函式
void Draw(FILE *fp);//繪製選單介面
void link(FILE *fp);//登入函式
void output(FILE *fp);//輸出函式
int Search(FILE *fp);//驗證賬號密碼函式
void input(FILE *fp);//輸入函式
void add();//對人員資訊進行增加函式
void delbyname();//對人員資訊按照姓名進行刪除
void delbyUser();//對人員資訊按照賬號進行刪除
void del();//刪除函式

對人員資訊進行結構體定義:

struct Link
{
	char User[20];    
	char Code[20];
	char name[10];
	char sex[10];

}people[N];


具體實現程式碼:

  1. #include <stdio.h>
    #include <
    stdlib.h>
    #include <string.h>
    #include <conio.h>
    
    
    #define N 2
    int Number = N;
    
    
    
    
    void bc(struct Link *st);
    void Draw(FILE *fp);
    void link(FILE *fp);
    void output(FILE *fp);
    int Search(FILE *fp);
    void input(FILE *fp);
    void add();
    void delbyname();
    void delbyUser();
    void del();
    
    
    
    
    struct Link
    {
    char User[20];
    char Code[20];
    char name[10];
    char sex[10];
    }people[N];
    
    
    int i;
    
    
    void input(FILE *fp)
    {
    
    
    for (i = 0; i < N; i++)
    {
    printf("請輸出第%d個人員的資訊\n", i + 1);
    printf("輸入人員姓名:\t");
    scanf("%s",people[i].name);
    printf("輸入人員性別:\t");
    scanf("%s", people[i].sex);
    printf("輸入人員賬號:\t");
    scanf("%s", people[i].User);
    printf("輸入人員密碼:\t");
    scanf("%s", people[i].Code);
    
    
    fwrite(&people[i], sizeof(struct Link), 1, fp);
    }
    fclose(fp);
    }
    int Search(FILE *fp)
    {
    char test_User[20];
    char test_Code[20];
    printf("請輸入賬號:\t");
    scanf("%s", test_User);
    printf("請輸入密碼:\t");
    scanf("%s", test_Code);
    for (i = 0; i < Number; i++)
    {
    if (strcmp(test_User, people[i].User) == 0)
    {
    if (strcmp(test_Code, people[i].Code) == 0)
    {
    printf("登入成功!\n");
    _getch();
    }
    else
    {
    printf("密碼輸入錯誤!\n");
    return 0;
    }
    }
    }
    }
    
    
    void output(FILE *fp)
    {
    fp = fopen("manage.txt", "r");
    i= 0;
    while (fread(&people[i], sizeof(struct Link), 1, fp) != NULL)
    {
    printf("第%d個人員的資訊\n",i+1);
    printf("姓名:\t%s\n性別:\t%s\n",people[i].name,people[i].sex);
    printf("賬號:\t%s\n密碼:\t%s\n", people[i].User, people[i].Code);
    i++;
    }
    fclose(fp);
    }//OK了
    void link(FILE *fp)
    {
    int n;
    printf("\n\n\n\n\t\t\t登入介面\n");
    while (true)
    {
    n = Search(fp);
    if (n != 0)	break;
    }
    }
    
    
    void Draw(FILE *fp)
    {
    int n;
    printf("\n\n\n\t\t**********       選單欄       **********\n");
    printf("\t\t******		1.檔案的寫入 	  ******\n");
    printf("\t\t******		2.檔案的讀出 	  ******\n");
    printf("\t\t******		3.賬號密碼登入 	  ******\n");
    printf("\t\t******		4.人員增加        ******\n");
    printf("\t\t******		5.人員刪除        ******\n");
    printf("\t\t******		6.退出系統        ******\n");
    printf("請輸入你的選擇:\t");
    scanf("%d", &n);
    switch (n)
    {
    case 1:
    input(fp);
    break;
    case 2:
    output(fp);
    break;
    case 3:
    link(fp);
    break;
    case 4:
    add();
    break;
    case 5:
    del();
    break;
    case 6:
    exit(0);
    
    
    
    
    }
    
    
    }
    
    
    void bc(struct Link *st)
    {
    FILE *fp = NULL;
    fp = fopen("manage.txt", "ab+");
    fwrite(st, sizeof(struct Link), 1, fp);
    fclose(fp);
    }
    
    
    
    
    void add()//增加人員資訊
    {
    int numberTemp = 0;
    int i = 0;
    struct Link temp;
    printf("請輸入要增加的人員資訊數量:");
    scanf("%d", &numberTemp);
    for (i = 0; i<numberTemp; i++)
    {
    printf("輸入第%d個人員資訊\n", i + 1);
    printf("姓名:\t");
    scanf("%s", temp.name);
    printf("性別:\t");
    scanf("%s", temp.sex);
    printf("賬號:\t");
    scanf("%s", temp.User);
    printf("密碼:\t");
    scanf("%s", temp.Code);
    people[Number++] = temp; //將剛新增的寫入到陣列
    bc(&temp); //將剛新增的寫入到檔案
    }
    printf("新增成功\n");
    }
    
    
    
    
    
    
    void delbyname()//按姓名刪除
    {
    FILE *fp = NULL;
    char name[60];
    int i = 0;
    int j = 0;
    printf("請輸入要刪除的人員的名字:");
    scanf("%s", name);
    for (i = 0; i<Number; i++)
    {
    if (strcmp(name, people[i].name) == 0) //如果查詢到就刪除
    {
    for (j = i; j<Number - 1; j++)
    {
    people[j] = people[j + 1];
    }
    Number--;
    }
    } //將剩餘資料寫入檔案  重新一寫的方式開啟檔案 把以前的資料擦除了
    fp = fopen("manage.txt", "wb");
    for (i = 0; i<Number; i++)
    {
    fwrite(&people[i], sizeof(struct Link), 1, fp);
    }
    fclose(fp);
    printf("刪除成功;\n");
    }
    
    
    void delbyUser()//按賬號刪除
    {
    FILE *fp = NULL;
    char User[20];
    int i = 0;
    int j = 0;
    printf("請輸入要刪除的人員的賬號:");
    scanf("%s", User);
    for (i = 0; i<Number; i++)
    {
    if (strcmp(User, people[i].User) == 0) //如果查詢到就刪除
    {
    for (j = i; j<Number - 1; j++)
    {
    people[j] = people[j + 1];
    }   Number--;
    }
    }  //將剩餘資料寫入檔案  重新一寫的方式開啟檔案 把以前的資料擦除了
    fp = fopen("manage.txt", "wb");
    for (i = 0; i<Number; i++)
    {
    fwrite(&people[i], sizeof(struct Link), 1, fp);
    }
    fclose(fp);
    printf("刪除成功;\n");
    }
    
    
    
    
    void del()//刪除
    {
    int n = 0;
    printf("選擇刪除方式\n");
    printf("1  按姓名刪除\n");
    printf("2  按賬號刪除\n");
    printf("請輸入你的選擇:\t");
    scanf("%d", &n);
    switch (n)
    {
    case 1: delbyname();
    break;
    case 2: delbyUser();
    break;
    }
    }
    
    
    void main()
    {
    FILE *fp;
    fp = fopen("manage.txt", "w");
    if (fp == NULL)		exit(0);
    while (true)		Draw(fp);
    }