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;

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