用C語言實現簡單的人員管理系統(續)
阿新 • • 發佈:2019-02-14
功能要求:
- 使用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];
具體實現程式碼:
#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); }