【程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告(2)試卷管理系統(tǒng)】(中二版)-創(chuàng)新互聯(lián)

創(chuàng)新互聯(lián)專(zhuān)業(yè)為企業(yè)提供左貢網(wǎng)站建設(shè)、左貢做網(wǎng)站、左貢網(wǎng)站設(shè)計(jì)、左貢網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、左貢企業(yè)網(wǎng)站模板建站服務(wù),10余年左貢做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
#include#include#include#includetypedef struct CHOOSE
{
    int n;
    char a[10000];
    char b[10000];
    char c[10000];
    char d[10000];
    char e[10000];
    char A[10000];
    struct CHOOSE *k;
}X;
typedef struct HOOL
{
    int n;
    char a[10000];
    char A[10000];
    struct HOOL *k;
}Y;

int a=1;
void r1(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            char z;
            printf("新增題目的題號(hào)是%d\n",a);
            printf("這道題的題型是( 1 是選擇 , 2 是填空 )\n");
            scanf("%c",&z);
            getchar();
            if(z=='1')
            {
                c1=(X*)malloc(sizeof(X));
                if(h1==NULL)
                h1=c1;
                else
                t1->k=c1;
                c1->k=NULL;
                c1->n=a;
                printf("題干:\n");
                gets(c1->a);
                printf("選項(xiàng):\n");
                gets(c1->b);
                gets(c1->c);
                gets(c1->d);
                gets(c1->e);
                printf("答案:\n");
                gets(c1->A);
                t1=c1;
                a++;
            }
            else if(z=='2')
            {
                c2=(Y*)malloc(sizeof(Y));       
                if(h2==NULL)
                h2=c2;
                else
                t2->k=c2;
                c2->k=NULL;
                c2->n=a;
                printf("題干:\n");
                gets(c2->a);
                printf("答案:\n");
                gets(c2->A);
                t2=c2;
                a++;
            }
            else if(z!='1'&&z!='2')
            printf("錯(cuò)了錯(cuò)了,重新來(lái)過(guò)吧,勇者,試煉之路還很長(zhǎng)呢~\n");
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
}
void r2(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            int q,u=0;
            printf("您要將圣劍斬向何處(請(qǐng)選擇您要?jiǎng)h除的題號(hào))\n");
            scanf("%d",&q);
            getchar();
            c1=h1,c2=h2;
            if(h1==NULL)
            {
                printf("此處黑暗不復(fù)存在,但滿是陰霾(題庫(kù) 1 已經(jīng)清空了)\n");
            }
            else
            {
                if(h1->n==q)
                {
                    h1=h1->k;
                    printf("光明已斬盡黑暗\n");
                    u++;
                }
                else
                {
                    while(c1->k!=NULL)
                    {
                        if(c1->k->n==q)
                        {
                            c1->k=c1->k->k;
                            printf("光明已斬盡黑暗\n");
                            u++;
                        }
                        else
                        c1=c1->k;
                    }
                }
            }
            if(h2==NULL)
            {
                printf("此處黑暗不復(fù)存在,但滿是陰霾(題庫(kù) 2 已經(jīng)清空了)\n");
            }
            else
            {
                if(h2->n==q)
                {
                    h2=h2->k;
                    printf("光明已斬盡黑暗\n");
                    u++;
                }
                else
                {
                    while(c2->k!=NULL)
                    {
                        if(c2->k->n==q)
                        {
                            c2->k=c2->k->k;
                            printf("光明已斬盡黑暗\n");
                            u++;
                        }
                        else
                        c2=c2->k;
                    }
                }
            }
            if(u==0)
            printf("此處黑暗已消失殆盡(題庫(kù)中沒(méi)有此題,刪除失敗)\n");
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
        }
void r3(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            h1=NULL;
            h2=NULL;
            a=1;
            printf("當(dāng)前世界已被刷新(題庫(kù)已經(jīng)清空)\n");
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
}
void r4(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            FILE *e1=fopen("T1 copy.txt","w+"),*e2=fopen("T2 copy.txt","w+");
            c1=h1;
            c2=h2;
            while(c1!=NULL&&c1->n!=0)
            {
                fprintf(e1,"%d\n",c1->n);
                fprintf(e1,"%s\n",c1->a);
                fprintf(e1,"%s\n",c1->b);
                fprintf(e1,"%s\n",c1->c);
                fprintf(e1,"%s\n",c1->d);
                fprintf(e1,"%s\n",c1->e);
                fprintf(e1,"%s\n",c1->A);
                c1=c1->k;
            }
            while(c2!=NULL&&c2->n!=0)
            {
                fprintf(e2,"%d\n",c2->n);
                fprintf(e2,"%s\n",c2->a);
                fprintf(e2,"%s\n",c2->A);
                c2=c2->k;
            }
            printf("剛剛在地圖上標(biāo)記好了你的進(jìn)程(備份完畢)\n");
            fclose(e1);
            fclose(e2);
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
}
void r5(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            int i,r=0;
            printf("簡(jiǎn)要展示一下你的風(fēng)之印記(請(qǐng)輸入需要修改的題號(hào))\n");
            scanf("%d",&i);
            getchar();
            if(h1==NULL)
            {
                printf("不好,此處所有風(fēng)之印記都被巨龍摧毀了(題庫(kù) 1 是空的)\n");
            }
            else
            {
                if(h1->n==i)
                {
                    printf("看來(lái)這道題是個(gè)選擇題\n");
                    printf("修改題干吧\n");
                    gets(h1->a);
                    printf("修改選項(xiàng)吧\n");
                    gets(h1->b);
                    gets(h1->c);
                    gets(h1->d);
                    gets(h1->e);
                    printf("修改答案吧\n");
                    gets(h1->A);
                    printf("風(fēng)之印記已經(jīng)更改了\n");
                    r++;
                }
                else
                {
                    while(c1!=NULL)
                    {
                        if(c1->n==i)
                        {
                            printf("看來(lái)這道題是個(gè)選擇題\n");
                            printf("修改題干吧\n");
                            gets(c1->a);
                            printf("修改選項(xiàng)吧\n");
                            gets(c1->b);
                            gets(c1->c);
                            gets(c1->d);
                            gets(c1->e);
                            printf("修改答案吧\n");
                            gets(c1->A);
                            printf("風(fēng)之印記已經(jīng)更改了\n");
                            r++;
                            break;
                        }
                        else
                        c1=c1->k;
                    }
                }
            }
            if(h2==NULL)
            {
                printf("不好,此處所有風(fēng)之印記都被巨龍摧毀了(題庫(kù) 2 是空的)\n");
            }
            else
            {
                if(h2->n==i)
                {
                    printf("看來(lái)這道題是個(gè)填空題\n");
                    printf("修改題干吧\n");
                    gets(h2->a);
                    printf("修改答案吧\n");
                    gets(h2->A);
                    printf("風(fēng)之印記已經(jīng)更改了\n");
                    r++;
                }
                else
                {
                    while(c2!=NULL)
                    {
                        if(c2->n==i)
                        {
                            printf("看來(lái)這道題是個(gè)填空題\n");
                            printf("修改題干吧\n");
                            gets(c2->a);
                            printf("修改答案吧\n");
                            gets(c2->A);
                            printf("風(fēng)之印記已經(jīng)更改了\n");
                            r++;
                            break;
                        }
                        else
                        c2=c2->k;
                    }
                }
            }
        if(r==0)
        printf("你并沒(méi)有在這個(gè)地方標(biāo)記風(fēng)之印記\n");
        printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
        getchar();
        }
void r6(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            int i,r=0;
            printf("請(qǐng)選擇你想看的魔法在《魔法禁書(shū)目錄》的代碼(請(qǐng)輸入需要查看的題目的題號(hào))\n");
            scanf("%d",&i);
            getchar();
            if(h1==NULL)
            {
                printf("不好,《魔法禁書(shū)目錄(上)》全破損了(題庫(kù) 1 是空的)\n");
            }
            else
            {
                if(h1->n==i)
                {
                    printf("題目是\n");
                    puts(h1->a);
                    printf("選項(xiàng)是\n");
                    puts(h1->b);
                    puts(h1->c);
                    puts(h1->d);
                    puts(h1->e);
                    printf("答案是\n");
                    puts(h1->A);
                    printf("已經(jīng)找到了,希望你好好學(xué)習(xí),成為不講武德的黏氰人\n");
                    r++;
                }
                else
                {
                    while(c1!=NULL)
                    {
                        if(c1->n==i)
                        {
                            printf("題目是\n");
                            puts(c1->a);
                            printf("選項(xiàng)是\n");
                            puts(c1->b);
                            puts(c1->c);
                            puts(c1->d);
                            puts(c1->e);
                            printf("答案是\n");
                            puts(c1->A);
                            printf("已經(jīng)找到了,希望你好好學(xué)習(xí),成為不講武德的黏氰人\n");
                            r++;
                            break;
                        }
                        else
                        c1=c1->k;
                    }
                }
            }
            if(h2==NULL)
            {
                printf("不好,《魔法禁書(shū)目錄(下)》全破損了(題庫(kù) 2 是空的)\n");
            }
            else
            {
                if(h2->n==i)
                {
                    printf("看來(lái)這道題是個(gè)填空題\n");
                    printf("題目是\n");
                    puts(h2->a);
                    printf("答案是\n");
                    puts(h2->A);
                    printf("已經(jīng)找到了,希望你好好學(xué)習(xí),成為不講武德的黏氰人\n");
                    r++;
                }
                else
                {
                    while(c2!=NULL)
                    {
                        if(c2->n==i)
                        {
                            printf("看來(lái)這道題是個(gè)填空題\n");
                            printf("題目是\n");
                            puts(c2->a);
                            printf("答案是\n");
                            puts(c2->A);
                            printf("已經(jīng)找到了,希望你好好學(xué)習(xí),成為不講武德的黏氰人\n");
                            r++;
                            break;
                        }
                        else
                        c2=c2->k;
                    }
                }
            }
        if(r==0)
        printf("年輕人,你是不是記錯(cuò)了呀,希望你耗子尾汁\n");
        printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
        getchar();
        }
void r7(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            printf("讓DIO統(tǒng)計(jì)一下你一共吃了多少塊史萊姆小面包吧(統(tǒng)計(jì)題庫(kù)中所有試題的數(shù)量)\n");
            int r=0;
            c1=h1,c2=h2; 
            while(c1!=NULL)
            {
                c1=c1->k;
                r++;
            }
            while(c2!=NULL)
            {
                c2=c2->k;
                r++;
            }
            printf("嗯,一共是 %d 噠!\n",r);
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
        }
void r8(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            printf("請(qǐng)描述一下那位神秘人的特征(輸入部分信息以搜題)\n");
            char s[100];
            gets(s);
            int r=0;
            c1=h1,c2=h2;
            while(c1!=NULL)
            {
                if(strstr(c1->a,s)!=NULL&&c1->n!=0)
                {
                    puts("||||||||這是一位嫌疑人:||||||||");
                    puts("題號(hào)是");
                    printf("%d\n",c1->n);
                    puts("題干是");
                    puts(c1->a);
                    puts("選項(xiàng)是");
                    puts(c1->b);
                    puts(c1->c);
                    puts(c1->d);
                    puts(c1->e);
                    puts("答案是");
                    puts(c1->A);
                    r++;
                    c1=c1->k;
                }
                else
                {
                    c1=c1->k;
                }     
            }
            while(c2!=NULL)
            {
                if(strstr(c2->a,s)!=NULL&&c2->n!=0)
                {
                    puts("||||||||這是一位嫌疑人:||||||||");
                    puts("題號(hào)是");
                    printf("%d\n",c2->n);
                    puts("題干是");
                    puts(c2->a);
                    puts("答案是");
                    puts(c2->A);
                    r++;
                    c2=c2->k;
                }
                else
                {
                    c2=c2->k;
                }     
            }
            if(r==0)
            printf("俺們村可沒(méi)有這一號(hào)人(未找到符合條件的題目)\n");
            else
            printf("就這些了,我可沒(méi)有故意隱瞞啊,勇者大人\n");
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
        }
void r9(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            int h[100],w=0,k=0,l=0;
            FILE *v=fopen("TEST.txt","w+");
            FILE *g=fopen("ANSWER.txt","w+");
            int e,r;
            c1=h1,c2=h2;
            while(c1!=NULL)
            {
                c1=c1->k;
                k++;
            }
            while(c2!=NULL)
            {
                c2=c2->k;
                l++;
            }
            printf("你終于想要進(jìn)行最終考驗(yàn)了,勇者!\n");
            printf("輸入你要生成的選擇題的數(shù)量\n");
            scanf("%d",&e);
            getchar();
            printf("輸入你要生成的填空題的數(shù)量\n");
            scanf("%d",&r);
            getchar();
            if(e>k||r>l)
            {
                if(e>k)
                printf("要求生成的選擇題數(shù)量超過(guò)了題庫(kù)保存的總額\n");
                if(r>l)
                printf("要求生成的填空題數(shù)量超過(guò)了題庫(kù)保存的總額\n");
            }
            else
            {
                printf("要開(kāi)始了呦\n");
                for(int d=0;dn==w)
                    {
                        fprintf(v,"%d\n",h1->n);
                        fprintf(v,"%s\n",h1->a);
                        fprintf(v,"%s\n",h1->b);
                        fprintf(v,"%s\n",h1->c);
                        fprintf(v,"%s\n",h1->d);
                        fprintf(v,"%s\n",h1->e);
                        fprintf(v,"\n");
                        fprintf(g,"%d\n",h1->n);
                        fprintf(g,"%s\n",h1->A);
                        fprintf(g,"\n");
                        printf("2\n");
                        r++;    
                    }    
                    else
                    {
                        while(c1!=NULL)
                        {
                            if(c1->n==w)
                            {
                                fprintf(v,"%d\n",c1->n);
                                fprintf(v,"%s\n",c1->a);
                                fprintf(v,"%s\n",c1->b);
                                fprintf(v,"%s\n",c1->c);
                                fprintf(v,"%s\n",c1->d);
                                fprintf(v,"%s\n",c1->e);
                                fprintf(v,"\n");
                                fprintf(g,"%d\n",c1->n);
                                fprintf(g,"%s\n",c1->A);
                                fprintf(g,"\n");
                                printf("3\n");
                                r++;
                                break;
                            }
                            else
                            c1=c1->k;
                        }        
                    }               
                    if(r==0)
                    {
                        d--;
                        printf("4\n");
                        continue;
                    }
                }
                printf("又開(kāi)始了呦\n");
                for(int c=e;cn==w)
                    {
                        fprintf(v,"%d\n",h2->n);
                        fprintf(v,"%s\n",h2->a);
                        fprintf(v,"\n");
                        fprintf(g,"%d\n",h2->n);
                        fprintf(g,"%s\n",h2->A);
                        fprintf(g,"\n");
                        r++;    
                        printf("22\n");
                    }    
                    else
                    {
                        while(c2!=NULL)
                        {
                            if(c2->n==w)
                            {
                                fprintf(v,"%d\n",c2->n);
                                fprintf(v,"%s\n",c2->a);
                                fprintf(v,"\n");
                                fprintf(g,"%d\n",c2->n);
                                fprintf(g,"%s\n",c2->A);
                                fprintf(g,"\n");
                                r++;
                                printf("33\n");
                                break;
                            }
                            else
                            c2=c2->k;
                        }        
                    }               
                    if(r==0)
                    {
                        c--;
                        printf("44\n");
                        continue;
                    }
                }
                printf("結(jié)束了。。。。\n");
            }
            fclose(v);
            fclose(g);
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
        }
void r0(X *h1,X *t1,X *c1,Y *h2,Y *t2,Y *c2)
{
            FILE *o1=fopen("T1.txt","w+"),*o2=fopen("T2.txt","w+");
            c1=h1;
            c2=h2;
            while(c1!=NULL&&c1->n!=0)
            {
                fprintf(o1,"%d\n",c1->n);
                fprintf(o1,"%s\n",c1->a);
                fprintf(o1,"%s\n",c1->b);
                fprintf(o1,"%s\n",c1->c);
                fprintf(o1,"%s\n",c1->d);
                fprintf(o1,"%s\n",c1->e);
                fprintf(o1,"%s\n",c1->A);
                c1=c1->k;
            }
            while(c2!=NULL&&c2->n!=0)
            {
                fprintf(o2,"%d\n",c2->n);
                fprintf(o2,"%s\n",c2->a);
                fprintf(o2,"%s\n",c2->A);
                c2=c2->k;
            }
            fclose(o1);
            fclose(o2);
            printf("那就好好休息吧,勇者也要好好睡一覺(jué)呢(程序結(jié)束)\n");
}
int main()
{
    srand((unsigned)time(NULL));//播種,使得rand()函數(shù)在程序運(yùn)行的每個(gè)時(shí)刻生成的隨機(jī)數(shù)都是不同的
    FILE *p1=fopen("T1.txt","r+"),*p2=fopen("T2.txt","r+");
    X *h1,*t1,*c1;
    Y *h2,*t2,*c2;
    h1=NULL,h2=NULL;
    t1=(X*)malloc(sizeof(X)),t2=(Y*)malloc(sizeof(Y));

    int x,y;

    int c,d;
    c=feof(p1),d=feof(p2);
    while(fscanf(p1,"%d\n",&a)!=EOF)
    {
        c1=(X*)malloc(sizeof(X));
        if(h1==NULL)
        h1=c1;
        else
        t1->k=c1;

        c1->k=NULL;

        fscanf(p1,"%s\n",c1->a);
        fscanf(p1,"%s\n",c1->b);
        fscanf(p1,"%s\n",c1->c);
        fscanf(p1,"%s\n",c1->d);
        fscanf(p1,"%s\n",c1->e);
        fscanf(p1,"%s\n",c1->A);
        c1->n=a;
        t1=c1;
        a++;
    }
    while(fscanf(p2,"%d\n",&a)!=EOF)
    {
        c2=(Y*)malloc(sizeof(Y));
        if(h2==NULL)
        h2=c2;
        else
        t2->k=c2;

        c2->k=NULL;

        fscanf(p2,"%s\n",c2->a);
        fscanf(p2,"%s\n",c2->A);
        c2->n=a;
        t2=c2;
        a++;
    }
    fclose(p1);
    fclose(p2);
    while(1)
    {
        printf("來(lái)吧,年輕的小小勇者,每個(gè)人都需要在某個(gè)時(shí)候打破自己的局限,不是嗎\n");
        printf("/\n");
        printf("輸入 1 添加題目\n");
        printf("輸入 2 刪除指定題目\n");
        printf("輸入 3 刪除所有題目\n");
        printf("輸入 4 備份所有題目\n");
        printf("輸入 5 修改指定題目\n");
        printf("輸入 6 查詢指定題目\n");
        printf("輸入 7 統(tǒng)計(jì)題目總數(shù)\n");
        printf("輸入 8 模糊查找題目\n");
        printf("輸入 9 生成一套自定義各種類(lèi)型題目數(shù)量的試卷\n");
        printf("輸入 0 終止此次冒險(xiǎn)\n");
        printf("/\n");
        printf("What's your choice?\n");
        scanf("%d",&x);
        getchar ();
        if(x==1)
            r1(h1,t1,c1,h2,t2,c2);
        else if(x==2)
            r2(h1,t1,c1,h2,t2,c2);
        else if(x==3)
            r3(h1,t1,c1,h2,t2,c2);
        else if(x==4)
            r4(h1,t1,c1,h2,t2,c2);
        else if(x==5)
            r5(h1,t1,c1,h2,t2,c2);
        else if(x==6)
            r6(h1,t1,c1,h2,t2,c2);
        else if(x==7)
            r7(h1,t1,c1,h2,t2,c2);
        else if(x==8)
            r8(h1,t1,c1,h2,t2,c2);
        else if(x==9)
            r9(h1,t1,c1,h2,t2,c2);
        else if(x==0)
            {
                r0(h1,t1,c1,h2,t2,c2);
                break;
            }
        else 
        {
            printf("錯(cuò)了錯(cuò)了,重新來(lái)過(guò)吧,勇者,試煉之路還很長(zhǎng)呢~\n");
            printf("請(qǐng)輸入「回車(chē)」以繼續(xù)您的征程\n");
            getchar();
        }
    }
    return 0;
}

(用適當(dāng)?shù)男问奖磉_(dá)算法設(shè)計(jì)思想與算法實(shí)現(xiàn)步驟)

步驟及思路:

前期

為了模擬真實(shí)出題情況,系統(tǒng)自帶題庫(kù)(當(dāng)然,也選擇清空題庫(kù),即一開(kāi)始就讓題庫(kù)是空的)

題庫(kù)有兩個(gè),一個(gè)是選擇題題庫(kù),另一個(gè)是填空題題庫(kù)

創(chuàng)建兩種鏈表分別對(duì)應(yīng)兩種題型

開(kāi)始

打開(kāi)兩個(gè)題庫(kù)文件,創(chuàng)建鏈表頭指針

申請(qǐng)動(dòng)態(tài)內(nèi)存

將題庫(kù)中原有的題讀入鏈表中(此過(guò)程需要間接結(jié)構(gòu)體指針)

將最后一個(gè)結(jié)點(diǎn)的指向下一個(gè)結(jié)點(diǎn)的指針為空

設(shè)置一個(gè)循環(huán),對(duì)于想要執(zhí)行的操作輸入相對(duì)應(yīng)的字符,?進(jìn)行判斷,執(zhí)行完操作之后返回菜單,直到輸入結(jié)束的指令

按照依次增大的方式生成升序題號(hào)

“添加題目”選項(xiàng)

先判斷頭指針是否為空(兩個(gè)鏈表分別判斷)

選則需要添加的題型,判斷寫(xiě)入那個(gè)指針

將添加的題型寫(xiě)入指針儲(chǔ)存起來(lái)

“刪除題目”選項(xiàng)

令中介指針等于頭指針,依次尋找下一個(gè)結(jié)點(diǎn),判斷題號(hào)是否等于需要?jiǎng)h除的題號(hào),如果是,則令結(jié)點(diǎn)指針跳過(guò)這個(gè)結(jié)點(diǎn),指向下一個(gè)結(jié)點(diǎn)(這樣鏈表中就刪除了這個(gè)結(jié)點(diǎn));如果在兩個(gè)題庫(kù)中遍歷之后沒(méi)有找到,則回復(fù)?沒(méi)有這道題?;如果有一個(gè)題庫(kù)是空的,就回復(fù)?選擇題(或填空題)題庫(kù)是空的

“刪除題庫(kù)”選項(xiàng)

令頭指針為空,實(shí)現(xiàn)丟棄鏈表,題庫(kù)就被清空了

“備份題庫(kù)”選項(xiàng)

定義兩個(gè)文件指針,新開(kāi)兩個(gè)備份題庫(kù)的文件,分別備份選擇題和填空題,把兩個(gè)鏈表內(nèi)容分別寫(xiě)入對(duì)應(yīng)的文件中

“根據(jù)題號(hào)查找題目”選項(xiàng)

令中介指針等于頭指針,遍歷鏈表,查找是否有題號(hào)等于需要查找的題號(hào),如果有,則將鏈表對(duì)應(yīng)的內(nèi)容打印出來(lái);若沒(méi)有,則反饋查無(wú)此題;若題庫(kù)為空,則反饋題庫(kù)為空

“模糊查找以實(shí)現(xiàn)搜題”選項(xiàng)

使用字符串函數(shù)strstr()進(jìn)行模糊查找,令中介指針等于頭指針,遍歷鏈表,若有相同內(nèi)容則返回非空,則將內(nèi)容打印出來(lái);若沒(méi)有找到相應(yīng)內(nèi)容,則反饋查無(wú)此題;若題庫(kù)為空則反饋題庫(kù)為空

“統(tǒng)計(jì)題目數(shù)量”選項(xiàng)

遍歷兩個(gè)鏈表,若鏈表指針不為空,則被統(tǒng)計(jì)為一個(gè)題,依次增加,達(dá)到計(jì)數(shù)的目的

“生成試卷”

輸入需要生成的選擇題數(shù)目和填空題數(shù)目,統(tǒng)計(jì)選擇題以及填空題的總題目數(shù)量,如果少于要生成的題目,則進(jìn)行反饋?選擇/填空題庫(kù)題數(shù)不足;結(jié)合隨機(jī)數(shù)函數(shù)隨機(jī)生成題號(hào),并進(jìn)行查重,如果某道題已經(jīng)出過(guò)則不再生成

“程序終止”

這一步操作較為關(guān)鍵,在實(shí)行操作終止時(shí),以寫(xiě)入的方式,會(huì)先將鏈表寫(xiě)入題庫(kù),實(shí)現(xiàn)題庫(kù)的更新

(詳細(xì)記錄在調(diào)試過(guò)程中出現(xiàn)的問(wèn)題及解決方法。記錄實(shí)驗(yàn)執(zhí)行的結(jié)果)

如何做到生成題號(hào)且不重復(fù)

定義一個(gè)全局變量a,并令a為1,每次添加一個(gè)完題目,就令a增加1,這樣實(shí)現(xiàn)生成的題目的題號(hào)都是升序的且不重復(fù)的

在讀取題庫(kù)中原有的題目的時(shí)候,令a等于讀取到的題目的序號(hào),并在讀取完一個(gè)題之后令a加一,這樣就實(shí)現(xiàn)了保證每次新增題目題號(hào)都是順序且為大的題號(hào)

判斷是否出錯(cuò)(安全性常規(guī)檢查)

檢查的內(nèi)容主要有:

1.是否在選擇執(zhí)行哪種操作時(shí)輸入了規(guī)定選項(xiàng)以外的內(nèi)容,此時(shí)應(yīng)報(bào)錯(cuò),并跳過(guò)此次循環(huán)

2.在查詢、修改、刪除以及生成試卷操作時(shí),要判斷是否有此題以及題庫(kù)是否為空,解決方法就是遍歷鏈表,如果鏈表頭指針是空,則為題庫(kù)空,如果鏈表無(wú)需要查找的題目,則為無(wú)此題

(對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行分析,問(wèn)題回答,實(shí)驗(yàn)心得體會(huì)及改進(jìn)意見(jiàn))

實(shí)驗(yàn)結(jié)果分析:

能滿足實(shí)驗(yàn)所有要求

回答問(wèn)題:

問(wèn)題一:

怎么實(shí)現(xiàn)的刪除指定題目,并且進(jìn)行安全性檢查

令中介指針等于頭指針,依次尋找下一個(gè)結(jié)點(diǎn),判斷題號(hào)是否等于需要?jiǎng)h除的題號(hào),如果是,則令結(jié)點(diǎn)指針跳過(guò)這個(gè)結(jié)點(diǎn),指向下一個(gè)結(jié)點(diǎn)(這樣鏈表中就刪除了這個(gè)結(jié)點(diǎn));如果在兩個(gè)題庫(kù)中遍歷之后沒(méi)有找到,則回復(fù)?沒(méi)有這道題?;如果有一個(gè)題庫(kù)是空的,就回復(fù)?選擇題(或填空題)題庫(kù)是空的

問(wèn)題二:

如何做到生成題號(hào)且不重復(fù)

定義一個(gè)全局變量a,并令a為1,每次添加一個(gè)完題目,就令a增加1,這樣實(shí)現(xiàn)生成的題目的題號(hào)都是升序的且不重復(fù)的

在讀取題庫(kù)中原有的題目的時(shí)候,令a等于讀取到的題目的序號(hào),并在讀取完一個(gè)題之后令a加一,這樣就實(shí)現(xiàn)了保證每次新增題目題號(hào)都是順序且為大的題號(hào)

心得總結(jié):

這個(gè)實(shí)驗(yàn)我寫(xiě)了三遍,每一遍都有不同的感悟,在寫(xiě)第一遍的時(shí)候,對(duì)于指針安排比較混亂,并且內(nèi)存分配邏輯不清晰,以至于程序?qū)懲曛蠓磸?fù)出現(xiàn)bug,但是很難找到錯(cuò)誤的地方;第二遍的時(shí)候優(yōu)化了內(nèi)存分配,使得程序可讀性增強(qiáng),容易找到指針位置,但是有缺點(diǎn)就是都寫(xiě)在了main函數(shù)里面,導(dǎo)致運(yùn)行效率低且main函數(shù)內(nèi)部冗雜;第三遍將各個(gè)操作都寫(xiě)在了自定義函數(shù)里面,并且這樣寫(xiě)有利于后期優(yōu)化修改。

通過(guò)寫(xiě)這次實(shí)驗(yàn),我更好地理解了動(dòng)態(tài)內(nèi)存分配,并對(duì)鏈表有了更深刻的認(rèn)識(shí),提高了我的邏輯性。通過(guò)修改子函數(shù),提高了我對(duì)傳參的理解。另外還學(xué)習(xí)到了模糊查找字符串內(nèi)容的函數(shù)strstr()。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:【程序設(shè)計(jì)實(shí)驗(yàn)報(bào)告(2)試卷管理系統(tǒng)】(中二版)-創(chuàng)新互聯(lián)
本文來(lái)源:http://muchs.cn/article22/dspjjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作服務(wù)器托管、網(wǎng)站收錄、域名注冊(cè)、網(wǎng)站內(nèi)鏈手機(jī)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)