一、實現動態開闢內存windows
二、實現簡單的增刪查改、清空、保存等功能3d
#define _CRT_SECURE_NO_WARNINGS 1 #ifndef _CONTACT__H_ #define _CONTACT__H_ #define name_MAX 20 #define Sex_MAX 10 #define Tele_MAX 12 #define Addr_MAX 20 #define member_MAX 2 #define DEFAULT_ADD 2 #include <stdio.h> #include <string.h> #include <conio.h> #include <windows.h> typedef struct Stu { char name[name_MAX]; int age; char Sex[Sex_MAX]; char Tele[Tele_MAX]; char Addr[Addr_MAX]; }Stu,*pStu; typedef struct Contact { pStu con; int count; int capacity; }Contact,*pContact; void InitContact( pContact pcon ); void ADD_contact(pContact pcon); void DEL_contact(pContact pcon); void SHOW_contact(pContact pcon); void EMPTY_contact(pContact pcon); void SEARCH_contact(pContact pcon); void MODIFY_contact(pContact pcon); void SORT_contact(pContact pcon); void EXIT_Contact(pContact pcon); void cheickCapacity(pContact pcon); void Read_Contact(pContact pcon); void Save_Contact(pContact pcon); #endif
#include "contact.h" void cheickCapacity(pContact pcon) { if(pcon->count == pcon->capacity) { pStu pre = (pStu)realloc(pcon->con,(pcon->capacity+DEFAULT_ADD)*sizeof(Stu)); if(pre!=NULL) { pcon->con = pre; pcon->capacity = pcon->capacity + DEFAULT_ADD; } printf("增容成功\n"); } } void Read_Contact(pContact pcon) { Stu temp; int i = 0; FILE * pfread = fopen("test.txt","r"); if(pfread == NULL) { perror("fopen"); return ; } while(1) { fread(&temp,sizeof(Stu),1,pfread); if(feof(pfread)!=0)//feof檢測文件是否結束,文件結束返回非0值,不然返回0 { break; } cheickCapacity(pcon); pcon->con[pcon->count++] = temp; } fclose(pfread); } void InitContact(pContact pcon) { pcon->con = (pStu)malloc(member_MAX*sizeof(Stu)); if(pcon->con==NULL) { printf("out of memery"); exit(EXIT_FAILURE); } pcon->count = 0; pcon->capacity = member_MAX; memset(pcon->con,0,member_MAX*sizeof(Stu)); Read_Contact(pcon); } void ADD_contact(pContact pcon) { cheickCapacity(pcon); printf("請輸入姓名:>"); scanf("%s",(pcon->con+pcon->count)->name); printf("請輸入年齡:>"); scanf("%d",&(pcon->con+pcon->count)->age); printf("請輸入性別:>"); scanf("%s",(pcon->con+pcon->count)->Sex); printf("請輸入電話:>"); scanf("%s",(pcon->con+pcon->count)->Tele); printf("請輸入地址:>"); scanf("%s",(pcon->con+pcon->count)->Addr); pcon->count++; system("cls"); } static int Find_member(pContact pcon,char name[name_MAX]) { int i = 0; for(i=0;i<pcon->count;i++) { if(strcmp((pcon->con+i)->name,name) == 0) { return i; } } return -1; } void DEL_contact(pContact pcon) { char name[name_MAX] = {0}; int temp = 0; int i = 0; printf("請輸入您要刪除的姓名:>"); scanf("%s",name); temp = Find_member(pcon,name); if(temp!=-1) { for(i=temp;i<pcon->count;i++) { pcon->con[i] = pcon->con[i+1]; pcon->count--; } printf("刪除成功!"); } else { printf("您所刪除的人不存在!\n"); } system("cls"); } void SHOW_contact(pContact pcon) { int i = 0; printf("姓名\t年齡\t性別\t電話\t\t住址\n"); for(i=0;i<pcon->count;i++) { printf("%s\t%d\t%s\t%s\t\t%s\n",(pcon->con+i)->name, (pcon->con+i)->age, (pcon->con+i)->Sex, (pcon->con+i)->Tele, (pcon->con+i)->Addr ); } } void EMPTY_contact(pContact pcon) { pcon->count = 0; } void SEARCH_contact(pContact pcon) { char name[name_MAX] = {0}; int temp = 0; printf("請輸入您要查找的姓名:>"); scanf("%s",name); temp = Find_member(pcon,name); if(temp != -1) { printf("%12s\t%3d\t%5s\t%12s\t%10s\n",(pcon->con+temp)->name, (pcon->con+temp)->age, (pcon->con+temp)->Sex, (pcon->con+temp)->Tele, (pcon->con+temp)->Addr ); } else { printf("您所查找的人不存在。\n"); } system("cls"); } void MODIFY_contact(pContact pcon) { char name[name_MAX] = {0}; int temp = 0; printf("請輸入您所要更改信息的姓名:>"); scanf("%s",name); temp = Find_member(pcon,name); if(temp != -1) { printf("請輸入要更改的姓名:>"); scanf("%s",(pcon->con+temp)->name ); printf("請輸入要更改的年齡:>"); scanf("%d",&(pcon->con+temp)->age); printf("請輸入要更改的性別:>"); scanf("%s",(pcon->con+temp)->Sex); printf("請輸入要更改的電話:>"); scanf("%s",(pcon->con+temp)->Tele); printf("請輸入要更改的地址:>"); scanf("%s",(pcon->con+temp)->Addr); printf("更改爲功!"); } else { printf("您要更改的人不存在。\n"); } system("cls"); } void SORT_contact(pContact pcon) { Stu str; int i = 0; int j = 0; for(i=0;i<pcon->count-1;i++) { for(j=0;j<pcon->count-1;j++) { if(strcmp(pcon->con[j].name,pcon->con[j+1].name)>0) { str = pcon->con[j]; pcon->con[j] = pcon->con[j+1]; pcon->con[j+1] = str; } } } system("cls"); } void Save_Contact(pContact pcon) { FILE* pfwrite = fopen("test.txt","w"); int i = 0; if(pfwrite == NULL) { perror("Save"); return; } for(i=0;i<pcon->count;i++) { fwrite(pcon->con+i,sizeof(Stu),1,pfwrite); } fclose(pfwrite); } void EXIT_Contact(pContact pcon) { Save_Contact(pcon); free(pcon->con); pcon->con = NULL; pcon->capacity = 0; pcon->count = 0; }
#include "contact.h" #include <conio.h> #include <windows.h> void mnue() { printf("**************************************\n"); printf("** 1.增長 **\n"); printf("** 2.刪除 **\n"); printf("** 3.查找 **\n"); printf("** 4.更改 **\n"); printf("** 5.顯示 **\n"); printf("** 6.排序 **\n"); printf("** 7.清空 **\n"); printf("** 0.退出 **\n"); printf("**************************************\n"); } enum Option { EXIT, ADD, DEL, SEARCH, MODIFY, SHOW, SORT, EMPTY, }; void test() { int input = 0; Contact my_con; InitContact(&my_con); do { mnue(); printf("請選擇:>"); scanf("%d",&input); switch(input) { case ADD: ADD_contact(&my_con); break; case DEL: DEL_contact(&my_con); break; case SEARCH: SEARCH_contact(&my_con); break; case MODIFY: MODIFY_contact(&my_con); break; case SHOW: SHOW_contact(&my_con); break; case SORT: SORT_contact(&my_con); break; case EMPTY : EMPTY_contact(&my_con); break; case EXIT: EXIT_Contact(&my_con); break; default: printf("輸入錯誤!請從新輸入:>\n"); break; } }while(input); } int main() { test(); return 0; }