iOS开发 ----- 学生管理系统改进版

之前的那个demo没有添加本地文件读写功能,所以每次都比较麻烦,要输入很多东西,才能看到系统的真面目,所以,今天改进了一下,可以读取本地文件,每次操作后都会保存到文件中,以免发生bug导致数据丢失,没有文件的话,会自动新建,然后会提示添加相关数据,然后会自动保存到文件

这个完全是用字符串存储的,而年龄的话是int,所以中间会由字符串转int,int转字符串的情况
还有就是分割和组合字符串,写到文件中以空格分开,而读取到结构体中需要用空格拆分,然后在分别写入
写入文件也是一样,从结构体重拿出相应数据,后边追加空格,来达到相应的效果

图就不贴了,和上次的一样,想看的话,点我

直接刚demo

/*************************************************************************
    > File Name: studyManager.c
    > Author: xiao333ma
    > Mail: [email protected] 
    > Created Time: 一  7/20 09:29:02 2015
 ************************************************************************/

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
typedef struct studentInfor
{
    char name[20];
    int age;
    char address[50];
    char phoneNumber[11];
    struct studentInfor  *next;
}SI;
void saveData(SI *listHead,const char *path)
{
    FILE *fp=fopen(path,"r+");
    SI *p=listHead;
    int i=1;
    printf("\n\n");
    while(p->next!=NULL)
    {
        p=p->next;
        char *str1=(char *)malloc(sizeof(char));
        char *str2=(char *)malloc(sizeof(char));
        char *str3=(char *)malloc(sizeof(char));
        char *str4=(char *)malloc(sizeof(char));
                                  strcpy(str1,p->name);
                                  sprintf(str2,"%d" ,p->age);
                                  strcpy(str3,p->address);
                                  strcpy(str4,p->phoneNumber);

        strcat(str1 , " ");
        strcat(str2 , " ");
        strcat(str3 , " ");
        if(p->next!=NULL)
            strcat(str4 , "\n");
        strcat(str1,str2);
        strcat(str1,str3);
        strcat(str1,str4);
        //printf("str1 = %s",str1);

        if(fputs(str1,fp))
        {
            printf("第%d条数据保存成功\n",i++);
        }

    }
    fclose(fp);


}
void printfInfor(SI * listHead)
{
    SI *p=listHead;
    printf("~~~~~~~~~~~~~~~~~~~~~~~~~信息列表~~~~~~~~~~~~~~~~~~~~~~\n");
    printf("姓名                年龄      地址                                                        联系方式\n");
    while(p->next!=NULL)
    {
        p=p->next;
        printf("%-20s%-10d%-60s%-11s\n",p->name,p->age,p->address,p->phoneNumber);
    }
}
SI* inputInfor()
{
    SI *node=(SI *) malloc ( sizeof(SI) );
    char name[20];
    char address[50];
    char phoneNumber[11];
    int age=0;
    if( node != NULL)
    {
        while(1)
        {
            printf("请输入姓名,20位以内\n");
            scanf("%s",name);
            getchar();
            if(strlen(name)<20)
            {
                strcpy( node->name , name);
                break;
            }else
                printf("输入的位数不符合要求");
        }
        while(1)
        {
            printf("请输入地址,50位以内\n");
            scanf("%s",address);
            getchar();
            if(strlen(address)<50)
            {
                strcpy( node->address , address);
                break;
            }else
                printf("输入的位数不符合要求");
        }
        while(1)
        {
            printf("请输入电话号码,11位\n");
            scanf("%s",phoneNumber);
            getchar();
            if(strlen(phoneNumber)<11)
            {
                strcpy( node->phoneNumber , phoneNumber);
                break;
            }else
                printf("输入的位数不符合要求");
        }
        printf("请输入年龄\n");
        scanf("%d",&age);
        getchar();
        if(age>150)
        {
            printf("年龄太大,不符合要求\n");

        }
        node->age=age;
        node->next=NULL;
    }
    return node;
}


void addInfor(SI *listHead)
{
    SI *p=listHead;
    SI *newNode=(SI *)malloc(sizeof(SI));
    newNode=inputInfor();//返回正常
    while(p->next!=NULL)
    {
        p=p->next;
    }
    if(p->next==NULL)
        p->next=newNode;
    newNode->next=NULL;
    free(newNode);

    //printfInfor(listHead);
}
int  searchInfor(SI *listHead , char *name,int isDel,int isModify)
{
    SI *p=listHead;
    SI *q;
    while(p->next!=NULL)
    {
        q=p;
        p=p->next;
        if(strcmp(p->name,name)==0)
        {
            printf("找到相应联系人\n\n");
            printf("%s,%d,%s,%s\n",p->name,p->age,p->address,p->phoneNumber);
            if(isModify == 1)
            {

                SI *modify=(SI *)malloc(sizeof(SI));
                modify=inputInfor();
                strcpy(p->name,modify->name);
                strcpy(p->address,modify->address);
                strcpy(p->phoneNumber,modify->phoneNumber);
                p->age=modify->age;
                printf("修改为\n");
                free(modify);
                printf("%s,%d,%s,%s\n",p->name,p->age,p->address,p->phoneNumber);
                //printfInfor(listHead);
                return 1;
            }
            if(isDel==1)//如果是真的话,就删除该元素
            {
                printf("是否真的要删除这条信息[Y/N]");
                char a;
                scanf("%c",&a);
                getchar();
                if(a=='Y')
                {
                    q->next=p->next;
                    p=q->next;
                    //printfInfor(listHead);
                    return 1;
                }
            }
            return 1;
        }
    }
    if(p->next==NULL)
    {
        if(strcmp(p->name,name)==0)
        {
            printf("找到相应联系人\n\n");
            printf("%s,%d,%s,%s\n",p->name,p->age,p->address,p->phoneNumber);
            if(isModify == 1)
            {
                SI *modify1=(SI *)malloc(sizeof(SI));
                modify1=inputInfor();
                strcpy(p->name,modify1->name);
                strcpy(p->address,modify1->address);
                strcpy(p->phoneNumber,modify1->phoneNumber);
                p->age=modify1->age;
                free(modify1);
                p->next=NULL;
                //printfInfor(listHead);
                return 1;
            }
            if(isDel==1)
            {
                printf("是否真的要删除这条信息[Y/N]");
                char a;
                scanf("%c",&a);
                getchar();
                if(a=='Y')
                {
                    q->next=NULL;
                    //printfInfor(listHead);

                    return 1;
                }

            }
            return 1;
        }
    }



    return -1;

}
 FILE* readToList(SI *listHead, FILE *fp)
{
    SI *p=listHead;
    char a[100];
    fgets(a,100,fp);
    SI *newNode=(SI *)malloc(sizeof(SI));
    int len=0;
    a[strlen(a)-1]='\0';
    char *token = strtok(a ," ");
    while(token!=NULL && len < 4 )
    {
                switch (len)
                {
                    case 0: strcpy(newNode->name,token);
                        break;
                    case 1: newNode->age=atoi(token);//字符串转数字
                        break;
                    case 2: strcpy(newNode->address,token);
                        break;
                    case 3: strcpy(newNode->phoneNumber,token);
                        break;
                }
                len++;
                token=strtok(NULL," ");
    }
    while(p->next!=NULL)
    {
        p=p->next;
    }
    if(p->next==NULL)
    {
                newNode->next=NULL;
    }
    p->next=newNode;
    p=p->next;

    return fp;
}

int main(int argc,const char *argv[])
{

    SI *list=(SI *)malloc(sizeof(SI));
    //int listLength=0;
    if(list == NULL)
    {
        return 0;
    }

    char name[20];
    char read[100];
    list->next=NULL;
    if(argc ==1)
    {
        printf("请输入文件路径\n");
        return 0;
    }
    FILE *fp=fopen(argv[1],"w+");
    if(fp)
    {

           if(fscanf(fp,"%c",read)==EOF)
            {
                rewind(fp);
                printf("该文件为空,为使系统正常工作,请先添加4个人员\n");
                addInfor(list);
                addInfor(list);
                addInfor(list);
                addInfor(list);
            }

           while(feof(fp)==0)
           {
              fp=readToList(list,fp);

           }
            printfInfor(list);

            while(1)
            {
                printf("\n\n");
                printf("***********************************************************\n");
                printf(">>>>>>>>>>>>>>小型学生管理系统>>>>>>>>>>>>>>>\n");
                printf("菜单列表:\n");
                printf("1:添加信息\n");
                printf("2:修改信息\n");
                printf("3:删除信息\n");
                printf("4:查询信息\n");
                printf("5:退出\n");
                printf(">>>>>>>>>>>>>>小型学生管理系统>>>>>>>>>>>>>>>\n");
                printf("***********************************************************\n\n");
                printf("请输入选项:\n");
                int a=0;
                scanf("%d",&a);
                getchar();
                switch(a)
                {
                    case 1:
                        addInfor(list);
                        printf("数据添加成功\n");
                        saveData(list,argv[1]);
                        printfInfor(list);
                        break;
                    case 2:
                        printf("请输入要修改的名字:");
                        scanf("%s",name);
                        getchar();
                        if(searchInfor(list,name,0,1)==-1)
                        {
                            printf("没有相关人员,请确认后在修改\n");
                        }
                        printf("数据修改成功\n");
                        saveData(list,argv[1]);
                        printfInfor(list);
                        break;
                    case 3:
                        printf("请输入要删除的名字:");
                        scanf("%s",name);
                        getchar();
                        if(searchInfor(list,name,1,0)==-1)
                        {
                            printf("没有相关信息,无法删除\n");
                        }
                        printf("数据删除成功\n");
                        saveData(list,argv[1]);
                        printfInfor(list);
                        break;
                    case 4:
                        printf("请输入要查找的名字:");
                        scanf("%s",name);
                        getchar();
                        if(searchInfor(list,name,0,0)==-1)
                        {
                            printf("没有找到相关人员,请确认后查找\n");
                        }
                        saveData(list,argv[1]);
                        printfInfor(list);
                        break;
                    case 5:
                        return 0;
                        break;



                }
            }


    }


        return 0;

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章