通讯录改进(可以保存至文件并读取)
2017-12-10 19:23
281 查看
头文件:
子函数:
主函数:
#ifndef _NODE_H_ #define _NODE_H_ struct node { char id[100] ; char name[10]; char address[10]; char tel[100]; char mob[100]; struct node *next; }; typedef struct node Node; typedef Node *STU; #endif
子函数:
#include <stdio.h> #include "student.h" #include <stdlib.h> #include <string.h> void ListInit(STU *L) { (*L) = (STU)malloc(sizeof(Node)); (*L)->next = NULL; } int AddInfo(STU *L) { STU p = *L; STU s; printf("Please input name,id,mob,tel,address:\n"); s = (STU)malloc(sizeof(Node)); scanf("%s%s%s%s%s",s->name,s->id,s->mob,s->tel,s->address); if(strlen(s->mob) != 11) { printf("无效手机号码!\n"); return 0; } if(strlen(s->tel) != 8) { printf("无效家庭电话号码!\n"); return 0; } while(p->next) { if(strcmp((p->next)->mob,s->mob) == 0 || strcmp((p->next)->tel,s->tel) == 0) { printf("已存在相同号码!\n"); return 0; } p = p->next; } p=*L; if(p->next ==NULL) { s->next = p->next; p->next = s; } else { while(p->next) { if(strcmp((p->next)->name,s->name)>0) { s->next = p->next; p->next = s; break; } p = p->next; } if(p->next ==NULL) { s->next = p->next; p->next = s; } } } void Save(STU l) { STU p; FILE *fp; int ret; p = l->next; fp = fopen("save.txt","w"); if(NULL == fp ) { perror("Fopen Failure!\n"); exit(1); } while(p) { ret = fwrite(p,1,sizeof(Node),fp); if(0 == ret) { perror("Fwrite Failure!\n"); exit(1); } p=p->next; } fclose(fp); } void Read(STU l) { STU p; STU r; FILE *fp; l->next = NULL; r = l; int ret; fp = fopen("save.txt","r"); if(NULL == fp) { perror("Fopen Failure!\n"); exit(1); } while(!feof(fp)) { p = (STU)malloc(sizeof(Node)); if(!p) { printf("Malloc Failure!\n"); return; } if(fread(p,sizeof(Node),1,fp) != 1) { break; } else { p->next = NULL; r->next = p; r = p; } } fclose(fp); } int ShowInfo(STU l) { if(l->next == NULL) { printf("It is NULL!\n"); } else { STU p = l->next; while(p) { printf("Name: %s Id: %s Mobile: %s Tele: %s Address: %s\n",p->name,p->id,p->mob,p->tel,p->address); p=p->next; } } } int ChangeInfo(STU *l) { STU p = (*l)->next; STU t = *l; STU s ; char n[10]; printf("Please input the na 4000 me you want to change:\n"); scanf("%s",n); while(p) { s = (STU)malloc(sizeof(Node)); if(strcmp(p->name,n) == 0) { printf("Please input the new information:\n"); scanf("%s%s%s%s%s",s->name,s->id,s->mob,s->tel,s->address); if(strlen(s->mob) != 11) { printf("无效手机号码!\n"); return 0; } if(strlen(s->tel) != 8) { printf("无效家庭电话号码!\n"); return 0; } while(t->next) { if(strcmp((t->next)->mob,s->mob) == 0|| strcmp((t->next)->tel,s->tel) == 0) { printf("已存在相同号码!\n"); return 0; } t = t->next; } strcpy(p->name , s->name); strcpy(p->id , s->id); strcpy(p->mob , s->mob); strcpy(p->tel, s->tel); strcpy(p->address , s->address); free(s); printf("Change Success!\n"); break; } else { p = p->next; } } if(p == NULL) { printf("Unknown person!\n"); } } int DeleteInfo(STU l) { STU p = l; STU tmp; char n[10]; printf("Please input the name you want to delete:\n"); scanf("%s",n); while(p->next) { if(strcmp((p->next)->name,n) == 0) { tmp = p->next; p->next = tmp->next; free(tmp); printf("Delete Success!\n"); break; } else { p = p->next; } } } int SearchInfo(STU l) { STU p = l->next; char n[10]; printf("Please input the name you want to search:\n"); scanf("%s",n); while(p) { if(strcmp(p->name,n) == 0) { printf("ID: %s Tel: %s Mob: %s Address: %s\n",p->id,p->tel,p->mob,p->address); break; } else { p =p->next; } } if(p == NULL) { printf("Unknown name!\n"); } }
主函数:
#include <stdio.h> #include "student.h" #include <stdlib.h> void show() { printf("***********************************\n\n"); printf("*******1.Add 2.Show********\n\n"); printf("*******3.Change 4.Delete******\n\n"); printf("*******5.Search 6.Save********\n\n"); printf("*******7.Read 8.Quit********\n\n"); printf("***********************************\n\n"); printf("*******Please input your choice****\n\n"); } int main() { int choice; STU stu; ListInit(&stu); while(1) { show(); scanf("%d",&choice); switch (choice) { case 1: AddInfo(&stu); break; case 2: ShowInfo(stu); break; case 3: ChangeInfo(&stu); break; case 4: DeleteInfo(stu); break; case 5: SearchInfo(stu); break; case 6: Save(stu); break; case 7: Read(stu); break; case 8: exit(0); break; default: printf("Unknown Input!\n"); } } return 0; }
相关文章推荐
- 附带文件操作的通讯录,可以实现链表到文件的写入以及文件到链表的读取
- 安卓文件保存、读取工具类,可以直接用,包含路径说明
- android保存文件到sd卡,读取和清空记录功能(可以用来保存用户名和密码)
- Qt:让控件(widgets)内容可以自动 保存/读取 到配置文件(QSettings)中
- Python 读取图片文件为矩阵和保存矩阵为图片的方法
- Unity中C# 文件本地读取,本地保存等实例
- Java 使用Zip进行多文件保存和读取
- 可以让保存在数据库中的文件查出 并被下载
- 编写一个程序,一行行地读取输入行,直至到达文件尾。算出每行输入行的长度,然后把最长的那行打印出来。为了简单起见,你可以假定所有的输入行均不超过1000个字符
- 将文件读取成二进制数组保存到数据库
- Java将对象保存到文件中/从文件中读取对象
- Android——文件的保存和读取
- 用C#编程从数据库中读取图片数据导进Excel文件的方法(如何从数据库中读取保存的文件,直接打开,中间不保存到本地)
- Python中对文件夹下的特定格式图像全部读取并转化为数组保存(也可转化为txt文件)
- HOW TO:配置或数据文件的保存(改进)
- curl 以http方式读取文件并保存
- .net读取图像并保存为文件
- C# 把文件保存进orcale 并读取出来还原
- MySQL配置文件my.cnf 例子最详细翻译,可以保存做笔记用。 (转)
- 如何利用C/C++逐行读取txt文件中的字符串(可以顺便实现文本文件的复制)