点击(此处)折叠或打开
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <errno.h>
- struct User{
- char name[20];
- int telnum;
- };
- static struct User* UserList;
- struct User* Now;
- void
- showUser(struct User u)
- {
- printf("姓名:%s --- 号码:%d\n",u.name,u.telnum);
- }
- struct User
- addUser()
- {
- Now = sbrk(0);
- Now = sbrk(sizeof(struct User));
- printf("输入添加用户名\n");
- scanf("%s",Now->name);
- printf("输入号码\n");
- scanf("%d",&(Now->telnum));
- printf("添加成功\n");
- return *Now;
- }
- struct User*
- find(const char* name)
- {
- struct User* p = UserList;
- struct User* end = sbrk(0);
- for(;p!=end;p++)
- {
- if(!strcmp(name,p->name)) {
- printf("已找到\n"
- "姓名:%s --- 号码:%d\n",p->name,p->telnum);
- return p;
- }
- }
- printf("未找到\n");
- return NULL;
- }
- void
- selectByName()
- {
- printf("输入要查找的姓名\n");
- char name[20];
- scanf("%s",name);
- find(name);
- return ;
- }
- void
- delUser()
- {
- printf("输入要删除的姓名:\n");
- char name[20];
- scanf("%s",name);
- struct User *p = find(name);
- if(p==NULL){
- return;
- }else{
- //*p = (struct User)NULL;
- p->name[0] = '\0';
- printf("删除成功\n");
- return;
- }
- }
- void
- saveFile()
- {
- umask(0022);
- int fd = open("USER.DAT",O_RDWR|O_CREAT|O_TRUNC,0666);
- if(fd==-1){
- perror("FILE NO EXCT");
- return;
- }
- struct User* p = UserList;
- struct User* end = sbrk(0);
- for(;p!=end;p++)
- {
- if(p->name[0]!='\0')
- pwrite(fd,p,sizeof(struct User),lseek(fd,0,SEEK_END));
- }
- printf("文件储存完成\n");
- close(fd);
- return;
- }
- void
- showAll()
- {
- struct User* p = UserList;
- struct User* end = sbrk(0);
- for(;p!=end;p++)
- {
- if(p->name[0]!='\0')
- showUser(*p);
- }
- return;
- }
- void
- loadFromFile()
- {
- char file[50];
- printf("输入文件路径\n");
- scanf("%s",file);
- int fd = open(file,O_RDONLY);
- if(fd==-1){
- printf("file error\n");
- loadFromFile();
- }
- off_t beg = lseek(fd,0,SEEK_SET);
- off_t end = lseek(fd,0,SEEK_END);
- off_t size = end - beg;
- lseek(fd,0,SEEK_SET);
- read(fd,UserList,size);
- printf("load success!!!\n");
- return ;
- }
- int
- main()
- {
- UserList = sbrk(0);
- Now = sbrk(0);
- int fd = open("USER.DAT",O_RDONLY);
- if(fd==-1){
- printf("file error\n");
- return -1;
- }
- lseek(fd,0,SEEK_SET);
- read(fd,(struct User*)UserList,end-beg);
- close(fd);
- printf("*************************************************\n"
- "通讯录小程序\n"
- "*************************************************\n"
- "[1]显示所有记录\n"
- "[2]添加记录\n"
- "[3]查找记录\n"
- "[4]删除记录\n"
- "[5]文件保存\n"
- "[6]导入文件记录\n"
- "[0]退出\n");
- while(1)
- {
- printf("请选择\n");
- int num = 0;
- scanf("%d",&num);
- switch(num){
- case 1:showAll();break;
- case 2:addUser();break;
- case 3:selectByName();break;
- case 4:delUser();break;
- case 5:saveFile();break;
- case 6:printf("导入文件记录\n");break;
- case 0:saveFile();brk(UserList);exit(0);
- }
- }
- }
相关热门文章
给主人留下些什么吧!~~
评论热议