C语言课程设计之链表,文件,指针的使用

新建的项目应该以.cpp为结尾,如果是点.c就会出错
项目的实现效果视频

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<windows.h>
#include<time.h>
#include "string.h"
int a,c;
char b[20],d[10],e[10];

/**
** 函数名: IsInteger(char *a)
** 函数功能:输入字符 '0'~'9'转化成 1~9
**/
int IsInteger(char *a)
{
	while(*a)
	{if (*a<'0' || *a>'9')
	 return 0;
	a++;
	}
	return 1;
}

/**
** 函数名:StringToInt(char *a)
** 例子:函数功能:输入字符串 '123'转化成 123
**/
int StringToInt(char *a)
{  int s=0;
	while(*a)
	{
      s=s*10+*a-'0';
	  a++;
	}
	return s;
}

//英语部分
/**
    英语部分描述: wordbag为一个链表,
    链表中包括一个单词以及单词的含义
    以及指向下一个结点的指针域
    实现的功能其实就是:对链表增删改查
    增:往链表中,插入一个结点
    删:找到指定的结点,进行删除
    改:找到指定的结点,修改相应的数据域
    查:根据某个数据域的值查找某个结点
*/
struct wordsbag//单词包
{
    char word[100];
    char mean[100];
    wordsbag *next;
};//head返回指针的指针,head2指向链表头

int Add_Wordsbag();//添加单词

wordsbag* Creast_Wordsbag();//新建单词

int Delete_Wordsbag();//删除单词

int Print(wordsbag* head);//打印单词

wordsbag *Read_Wordsbag();//读取单词

int Save_Wordsbag(wordsbag* head);//保存单词

int Search_Wordsbag();//寻找单词

int Made_Wordsbag();//

int Made_Uknown_Wordsbag(wordsbag *words);

int Print_Uknown_Wordsbag();

wordsbag *Read_Uknow_Wordsbag();

/**
   函数名:Creast_Wordsbag()
   函数功能:a为创建单词的数量
   通过一个while(a)循环,来创建一个长度为a的链表
*/
wordsbag* Creast_Wordsbag()
{
    wordsbag *head,*p,*q;

    q=head=(wordsbag *)malloc(sizeof(wordsbag));
    if(q==NULL)
    {
        printf("内存申请错误\n");
        return NULL;
    }
    printf("请输入要存入单词的个数:");

    /**
        判断输入的有效性,拦截输入负数的情况
    */
    scanf("%s",d);
    while (!IsInteger(d)||StringToInt(d)<0)
     {
         printf("数据有误,重新输入:");
         scanf("%s",d);
     }
    a=StringToInt(d);

    while(a)
    {
        p=(wordsbag *)malloc(sizeof(wordsbag));
        printf("***请输入单词:\t");
        scanf("%s",p->word);
        printf("***请输入词义:\t");
        scanf("%s",p->mean);
        q->next=p;
        q=p;
        a--;
    }
    q->next=NULL;
    return head;
}

/**
   函数名:Save_Wordsbag(wordsbag* head)
   函数输入:wordsbag* head,表示为链表,将得到的链表存储在一个danci.txt的文件中
*/
int Save_Wordsbag(wordsbag* head)
{
    FILE *fp;
    if((fp=fopen("D:\\danci.txt","w"))==NULL)
    {
        printf("文件打开错误\n");
        return 0;
    }
    wordsbag *p;
    p=head->next;
    while(p)
    {
        //fwrite 将p中的数据写入文件指针fp中每一次写一个表结点的数据
        fwrite(p,sizeof(wordsbag),1,fp);
        p=p->next;
    }
    fclose(fp);
    return 1;
}
/**
   函数名:wordsbag *Read_Wordsbag()
   函数输入:从danci.txt文件中,将fp所指向的数据,每一次读一块,读到p指针中
            返回,指向新建链表的头部,该链表包括了文件中所存的所有数据
*/
wordsbag *Read_Wordsbag()
{
    wordsbag *head,*p,*q;
    FILE *fp;
    fp=fopen("D:\\danci.txt","r");
    head = q =(wordsbag *)malloc(sizeof(wordsbag));
    while(!feof(fp))
    {
	  p=(wordsbag *)malloc(sizeof(wordsbag));
	  if((fread(p,sizeof(wordsbag),1,fp))!=1)
	  break;
	  q->next=p;
	  q=p;
    }
    q->next=NULL;
    fclose(fp);
    return head;
}
/**
   函数名:testMyselsf()
   函数功能:d为判断所进行的功能
   d = 1;进行英文回答中文
   d = 2; 进行中文回答英文
*/
int testMyselsf()
{
    wordsbag  *head,*p;
    int m1;
    char word[100];
    char word1[100];
    head = Read_Wordsbag();
    if(head==NULL)
    {
        return 0;
    }
    getch();   //不立刻退出窗口
	system("cls");
    printf("-------------------------------\n");
	printf("|\t1:英文挑战中文  \t|\n");
	printf("|\t2:中文挑战英文  \t|\n");
	printf("-------------------------------\n");
	printf("请输入功能选项:");
    scanf("%s",d);
    while (!IsInteger(d)||StringToInt(d)>3||StringToInt(d)<0)
    {
        printf("数据有误,重新输入:");
        scanf("%s",d);
    }
    m1=StringToInt(d);
	if(m1==1)
	{
        p=head->next;
        while(p)
        {  system("cls");
           printf("---------单词英文为:%s\n",p->word);
           printf("---------请挑战中文:\t");
           scanf("%s",&word);
           if(!strcmp(p->mean,word))
           {
               printf("---------恭喜你,回答正确!\n");
           }
           else
           {
                printf("---------很遗憾,回答错误!\n");
                printf("\n--------正确应为:----------\n");
                printf("|\t单词\t词义\t|\n");
                printf("|\t%s\t%s\t|\n",p->word,p->mean);
                printf("-------------------------\n");
           }
           p=p->next;
           getch();   //不立刻退出窗口
        }
	}
	if(m1==2)
	{
        p=head->next;
        while(p)
        {  system("cls");
           printf("---------单词中文为:%s\n",p->mean);
           printf("---------请挑战英文:\t");
           scanf("%s",&word);
           if(!strcmp(p->word,word))
           {
               printf("---------恭喜你,回答正确!\n");
           }
           else
           {
               printf("---------很遗憾,回答错误!\n");

                printf("\n--------正确应为:----------\n");
                printf("|\t单词\t词义\t|\n");
                printf("|\t%s\t%s\t|\n",p->word,p->mean);
                printf("-------------------------\n");
           }
           p=p->next;
           getch();   //不立刻退出窗口
        }
	}
		return 1;
}
//打印
/**
   函数名:int Print(wordsbag* head)
   函数功能:输入head链表头,打印出该链表
*/
int Print(wordsbag* head)
{
    wordsbag *p;
    p=head->next;
    printf("\n-------------------\n");
    printf("|\t单词\t词义\t|\n");
    while(p!=NULL)
    {
        printf("|\t%s\t%s\t|\n",p->word,p->mean);
        printf("\n-------------------\n");
        p=p->next;
    }
    return 1;
}
/**
   函数名:Search_Wordsbag()
   函数功能:根据单词英文,输出单词的含义
*/
int Search_Wordsbag()
{
    wordsbag *head,*p;
    char words[10];
    printf("请输入要查找的单词:\t");
    scanf("%s",words);
    head=Read_Wordsbag();
    p=head->next;
    {
    while(p)
    if(!strcmp(p->word,words))
    {
    printf("\n-------------------\n");
    printf("|\t单词\t词义\t|\n");
    printf("|\t%s\t%s\t|\n",p->word,p->mean);
    printf("\n-------------------\n");
    break;
    }
    else
    {
    p=p->next;
    }
    }
    if(p==NULL)
    {
        printf("\n对不起你输入的单词不存在!\n");
    }
    return 1;
}
/**
   函数名:Add_Wordsbag()
   函数功能:将用户输入的单词存放到文件的末尾
*/
int Add_Wordsbag()
{
    wordsbag* head;
    head=Creast_Wordsbag();
    FILE *fp;
    if((fp=fopen("D:\\danci.txt","a"))==NULL)
    {
        printf("打开文件失败\n");
        return 0;
    }
    wordsbag *p;
    p=head->next;
    while(p)
    {
        fwrite(p,sizeof(wordsbag),1,fp);
        p=p->next;
    }
    fclose(fp);
    return 1;
}
/**
   函数名:Delete_Wordsbag()
   函数功能:查找到表结点的位置,然后删除该结点,并把
    该链表的剩下数据节点数据存储在文件中
*/
int Delete_Wordsbag()
{
    wordsbag *head,*p,*q;
    char words[10];
    printf("\n请输入你想要删除的单词:\t");
    scanf("%s",words);
    q=head=Read_Wordsbag();
    p=head->next;
    int a=0;
    while(p)
    {
        if(!strcmp(p->word,words))
        {
            printf("你要删除的单词为:\t");
            printf("\n-------------------------\n");
            printf("|\t单词\t词义\t|\n");
            printf("|\t%s\t%s\t|\n",p->word,p->mean);
            printf("---------------------------\n");
            a=1;
            break;
        }
        else
        {
            p=p->next;
        }
    }
    if(a==1){
    printf("请再次确认是否删除该单词\n");
    printf("1.是           2.否\n");
    //判断输入的有效性
    scanf("%s",d);
    while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
     {printf("数据有误,重新输入:");
         scanf("%s",d);
     }
    a=StringToInt(d);
    if(a==1)
    {
        p=head->next;
        while(p)
        {
            if(!strcmp(p->word,words))
            {
                q->next=p->next;
                printf("\n--------删除成功!----------\n");
                break;
            }
            else
            {
                q=p;
                p=p->next;
            }
        }
    }
    Save_Wordsbag(head);
    }
    return 1;
}

/**
   函数名:Made_Wordsbag()
   函数功能:如果文件中没有被写入链表数据,则需要将当前的链表的写入文件
*/
int Made_Wordsbag()
{
    wordsbag *head;
    FILE *fp;
if(!(fp=fopen("D:\\danci.txt","r")))
{
    head=Creast_Wordsbag();
    printf("***您的输入已经结束***\n");
    int a,i=0;
    printf("***是否存盘***\n");
    char aa[100]="***温馨提示:您此次为第一次输入,建议存盘***\n";
    printf("          ");
    for(int j=0;j<strlen(aa);j++)
    {
        printf("%c",aa[j]);
        while(i<=10000000)
        {
            i++;
        }
            i=0;
    }
    printf("\n是否存盘\n");
    printf("1.是                                        2.否\n");
    //判断输入的有效性
    scanf("%s",d);
    while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
     {printf("数据有误,重新输入:");
         scanf("%s",d);
     }
    a=StringToInt(d);
    if(a==1)
    if(Save_Wordsbag(head)!=1)
    {
        printf("对不起,存盘失败!\n");
    }
    }
    else
    {
        printf("转入添加界面\n");
        Add_Wordsbag();
    }
    return 1;
}
/**
   函数名:int Made_Uknown_Wordsbag(wordsbag *words)
   函数功能:将新单词words存入单词本文件中,如果该单词本文件
                还未创建,则新建一个单词本写入,如果单词本已经创建
                就将fp指向已经新建的文件本中
*/
int Made_Uknown_Wordsbag(wordsbag *words)
{
    FILE *fp1;
    fp1=fopen("D:\\生词本.txt","r");
    if(fp1==NULL)
    {
        FILE *fp;
        fp=fopen("D:\\生词本.txt","w");
        if(fp==NULL)
        {
            printf("文件打开错误\n");
            return 0;
        }
        fwrite(words,sizeof(wordsbag),1,fp);
        printf("添加成功\n");
        fclose(fp1);
        fclose(fp);
        return 1;
    }
    else
    {
        FILE *fp;
        fp=fopen("D:\\生词本.txt","a");
        if(fp==NULL)
        {
            printf("文件打开错误\n");
            return 0;
        }
        fwrite(words,sizeof(wordsbag),1,fp);
        printf("生词添加成功\n");
        fclose(fp);
        fclose(fp1);
        return 1;
    }
//添加
}
/**
   函数名:int Print_Uknown_Wordsbag()
   函数功能:打印出新词本的数据
*/
int Print_Uknown_Wordsbag()
{
    int s=0;
    wordsbag *head,*p;
    head=Read_Uknow_Wordsbag();
    p=head->next;
    while(p)
    {
        s++;
        p=p->next;
    }
    printf("\t\t据统计当前有%d个尚未掌握的单词\n",s);
    Print(head);
    return 1;
}
/**
   函数名:wordsbag *Read_Uknow_Wordsbag()
   函数功能:返回指向单词本中链表的头
*/
wordsbag *Read_Uknow_Wordsbag()
{
    wordsbag *head,*p,*q;
    FILE *fp;
    fp=fopen("D:\\生词本.txt","r");
    head=q=(wordsbag *)malloc(sizeof(wordsbag));
    while(!feof(fp))
    {
        p=(wordsbag *)malloc(sizeof(wordsbag));
        if((fread(p,sizeof(wordsbag),1,fp))!=1)
        break;
        q->next=p;
        q=p;
    }
    q->next=NULL;
    fclose(fp);
 return head;
}


//数学部分
/**
    aTopic 为一道题
    testPaper
    为一张试卷 其中,ap中存放的是指向某一道题的地址,

*/

struct aTopic
{      //一道题
        int value1;
        char ope;//运算符
        int value2;
        double answer;
        double result;
};
/**
*   topicValue;//一张试卷中题目的数量
    dataMin; //一张试卷中数值最小值
    dataMax; //一张试卷中数值最大值
    一维指针是地址,二维指针是地址的地址,因为ap是一个结构体,所以要定义aTopic **ap;
    *ap指向一道题,ap指向一道题的地址
*/
struct testPaper
{   //一张试卷
    int topicValue;
    int dataMin;
    int dataMax;
    //一维指针是地址,二维指针是地址的地址,因为ap是一个结构体,所以要定义aTopic **ap;
    //*ap指向一道题,ap指向一道题的地址
    aTopic** ap;
};

double yue2(double a)
{
    return double(int(a*100))/100.00;
}
//返回指向试卷的指针,这个指针指向第一道题
testPaper* initTestPaper()
{ //初始化试卷
    testPaper* tp=(testPaper*)malloc(sizeof(testPaper));
	printf("现在开始初始化试卷\n");
	printf("--------------------------------------\n");
    printf("你想做题目数为:");
    //判断输入的有效性
   scanf("%s",d);
   while (!IsInteger(d))
   {
       printf("数据有误,重新输入:");
	   scanf("%s",d);
   }
    tp->topicValue=StringToInt(d);
    //tp->ap获得了一张试卷中,第一道题的首地址
    tp->ap=(aTopic**)malloc(sizeof(aTopic*)*(tp->topicValue));
    printf("你希望题目数据最小为:");
    //判断输入的有效性
	scanf("%s",d);
   while (!IsInteger(d))
   {
     printf("数据有误,重新输入:");
	 scanf("%s",d);
   }
    tp->dataMin=StringToInt(d);
    do{
    printf("你希望题目数据最大为:");
    //判断输入的有效性
    scanf("%s",d);
   while (!IsInteger(d))
   {
    printf("数据有误,重新输入\n");
	 scanf("%s",d);
   }
    tp->dataMax=StringToInt(d);
	}while(tp->dataMax<tp->dataMin?printf("最大数据小于最小数据,请重新输入\n"):0);
	printf("--------------------------------------\n");
    for(int tm=0;tm<tp->topicValue;tm++)
    {
        aTopic* ap=(aTopic*)malloc(sizeof(aTopic));
        //如果最大值和最小值相同,输出0,否则从最小值到最大值之间生成一个随机数
        ap->value1=(rand()%((tp->dataMax-tp->dataMin)==0?1:(tp->dataMax-tp->dataMin)))+tp->dataMin;
        ap->value2=(rand()%((tp->dataMax-tp->dataMin)==0?1:(tp->dataMax-tp->dataMin)))+tp->dataMin;
        jump:
        switch(rand()%4)
        {
            case 0:ap->ope='+';ap->result=(double)(ap->value1+ap->value2);break;
            case 1:ap->ope='-';ap->result=(double)(ap->value1-ap->value2);break;
            case 2:ap->ope='*';ap->result=(double)(ap->value1*ap->value2);break;
            case 3:if(ap->value2==0) goto jump;
            ap->ope='/';ap->result=yue2(((double)ap->value1/(double)ap->value2));break;
        }
        tp->ap[tm]=ap;
    }
    return tp;
}


void doExam(testPaper* tp){   //开始答题
    HANDLE ConsoloPrint;
    ConsoloPrint=GetStdHandle(STD_OUTPUT_HANDLE);
    for(int tm=0;tm<tp->topicValue;tm++)
        {
        printf("%d%c%d=",tp->ap[tm]->value1,tp->ap[tm]->ope,tp->ap[tm]->value2);
        scanf("%lf",&(tp->ap[tm]->answer));
        if(tp->ap[tm]->answer == tp->ap[tm]->result)
        {
            SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_GREEN);
            printf("对\n");
            SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
        }
        else
        {
            SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_RED);
            printf("错\n");
            SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
        }
    }
}

testPaper* correct(testPaper* tp)
{  //批改试卷函数
    testPaper* wrongTp=(testPaper*)malloc(sizeof(testPaper));   //创建一张用于存放错题的空试卷,当遇到错题时只需要将空试卷的题目指针指向那道题
    wrongTp->topicValue=0;
    wrongTp->ap=(aTopic**)malloc(sizeof(aTopic*)*wrongTp->topicValue);

    for(int tm=0;tm<tp->topicValue;tm++)
    {
        if(tp->ap[tm]->answer!=tp->ap[tm]->result){
            wrongTp->topicValue++;
            wrongTp->ap=(aTopic**)realloc(wrongTp->ap,sizeof(aTopic*)*(wrongTp->topicValue));
            wrongTp->ap[wrongTp->topicValue-1]=tp->ap[tm];
        }
    }
	getch();
	system("cls");
	printf("--------------------------------------\n");
    printf("你一共做了题目数:%d              |\n",tp->topicValue);
	printf("做对题目数:%d                    |\n",tp->topicValue-wrongTp->topicValue);
	printf("做错题目数:%d                    |\n",wrongTp->topicValue);
    printf("正确率为:%.2f%%                |\n",(1-((double)wrongTp->topicValue/(double)tp->topicValue))*100);
	printf("--------------------------------------\n");
	return wrongTp;
}
void showTestPaper(testPaper* tp,bool answer)
{  //如果bool answer为true,显示正确答案,如果为false,显示做错的题
    HANDLE ConsoloPrint;
    ConsoloPrint=GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_RED);
    if(answer)
        SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_GREEN);
    for(int tm=0;tm<tp->topicValue;tm++){
        if(answer)
            printf("%d%c%d=%.2f\n",tp->ap[tm]->value1,tp->ap[tm]->ope,tp->ap[tm]->value2,tp->ap[tm]->result);
        else
            printf("%d%c%d=%.2f\n",tp->ap[tm]->value1,tp->ap[tm]->ope,tp->ap[tm]->value2,tp->ap[tm]->answer);
    }
    SetConsoleTextAttribute(ConsoloPrint,FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_GREEN);
}


int main(){
	int n1;
loop1: system("cls");
	printf("**********************小学生学习系统主界面*******************\n");
	printf("-------------------------\n");
	printf("|\t1:数学     \t|\n");
	printf("|\t2:英语     \t|\n");
	printf("|\t3:退出学习系统\t|\n");
	printf("|\t4:清除系统内容\t|\n");
	printf("-------------------------\n");
	printf("请输入功能选项:");
    scanf("%s",d);
    while (!IsInteger(d)||StringToInt(d)>4||StringToInt(d)<0)
    {
        printf("数据有误,重新输入:");
	    scanf("%s",d);
    }
    n1=StringToInt(d);
	if(n1==1){
     loopm:
		system("cls");
	printf("**************************数学界面***************************\n");
    srand(time(0));
    loop2:
    testPaper* tp=initTestPaper();
    testPaper* wrongTp;
    int doAgain=0;
	system("cls");
    printf("(除法最多只需保留两位小数,不需要四舍五入)\n");
	printf("----------现在开始答题:-----------\n");
    doExam(tp);
    wrongTp=correct(tp);
    while(wrongTp->topicValue!=0)
    {
        printf("其中做错的题:\n");
        showTestPaper(wrongTp,false);
        jump2:

        printf("--------------------------\n");
        printf("|\t 1:重写错题\t| \n");
        printf("|\t 2:退出程序\t|\n");
        printf("|\t 3:查看正确答案\t|\n");
        printf("|\t 4:返回数学界面\t|\n");
        printf("|\t 5:返回主界面\t|\n");
        printf("--------------------------\n");
        printf("请输入功能选项:\n");
        //判断输入的有效性
       scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>5||StringToInt(d)<0)
   {
     printf("数据有误,重新输入:");
	 scanf("%s",d);
   }
    doAgain=StringToInt(d);
        if(doAgain==1)
        {	system("cls");
            printf("----------------------\n重做已经答错的题:\n");
            doExam(wrongTp);
            wrongTp=correct(wrongTp);
        }
        else if(doAgain==3)
        {
			system("cls");
            printf("错题的正确答案:\n");
            showTestPaper(wrongTp,true);
            goto jump2;
        }
		else if(doAgain==4)
		{
			goto loopm;
		}
		else if(doAgain==5)
		{
			goto loop1;
		}
        else if(doAgain==2){
			goto loop0;
            break;
        }
    }

getch();
	system("cls");//不立刻退出窗口
int n2;
printf("--------------------------\n");
	printf("|\t 1:继续答题        \t| \n");
	printf("|\t 2:返回数学界面\t|\n");
	printf("|\t 3:返回主界面\t|\n");
	printf("|\t 4:退出学习系统\t|\n");

	printf("--------------------------\n");
printf("请输入你要完成的功能:");
//判断输入的有效性
 scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>4||StringToInt(d)<0)
   {printf("数据有误,重新输入:");
	 scanf("%s",d);
   }
   n2=StringToInt(d);
if(n2==1)
{system("cls");goto loop2;}
if(n2==2)
{  system("cls");goto loopm;}
if(n2==4)
{system("cls");goto loop0;}
if(n2==3)
{system("cls");goto loop1;}
	}
	if(n1==2){

loop3:
	system("cls");
printf("**************************英语界面***************************\n");
printf("-------------------------\n");
printf("|\t1.词库创建    \t|\n");
printf("|\t2.单词查找    \t|\n");
printf("|\t3.单词的删除\t|\n");
printf("|\t4.单词自我评测\t|\n");
printf("|\t5.返回主界面\t|\n");
printf("-------------------------\n");
int flag4;
printf("请输入你想要进行的功能:\n");
//判断输入的有效性
scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>5||StringToInt(d)<0)
   {printf("数据有误,重新输入:");
	 scanf("%s",d);
   }
  flag4=StringToInt(d);
switch(flag4)
{
case 1:
if(Made_Wordsbag()!=1)
{printf("创建失败\n");}
else
{printf("恭喜你,创建成功!\n");}
getch();   //不立刻退出窗口
	system("cls");
printf("---------------------------\n");
printf("|    1:返回上一界面         |\n");
printf("|    2:退出程序             |\n");
printf("---------------------------\n");
printf("请输入功能选项:\n");
int n3;
scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
   {printf("数据有误,重新输入\n");
	 scanf("%s",d);
   }
  n3=StringToInt(d);
switch(n3)
{
	case 1: goto  loop3;break;
	case 2: goto  loop0;break;
}
case 2:
if(Search_Wordsbag()!=1)
printf("-----单词不存在!查找失败----\n");
getch();   //不立刻退出窗口
	system("cls");
printf("---------------------------\n");
printf("|    1:返回上一界面         |\n");
printf("|    2:退出程序             |\n");
printf("---------------------------\n");
printf("请输入功能选项:\n");
int n4;
//判断输入的有效性
scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
   {printf("数据有误,重新输入\n");
	 scanf("%s",d);
   }
  n4=StringToInt(d);
switch(n4)
{
	case 1: goto  loop3;break;
	case 2: goto  loop0;break;
}

case 3:
if(Delete_Wordsbag()!=1)
printf("----单词不存在!删除失败-----\n");
getch();   //不立刻退出窗口
	system("cls");
printf("---------------------------\n");
printf("|    1:返回上一界面         |\n");
printf("|    2:退出程序             |\n");
printf("---------------------------\n");
printf("请输入功能选项:\n");
int n5;

//判断输入的有效性
scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
   {printf("数据有误,重新输入:\n");
	 scanf("%s",d);
   }
  n5=StringToInt(d);
switch(n5)
{
	case 1: goto  loop3;break;
	case 2: goto  loop0;break;
}
case 4:
	if(testMyselsf())
	{	printf("\n\n----------------------------");
		printf("你现在不需要自测,你所有的单词已经掌握!\n");}
	getch();   //不立刻退出窗口
	system("cls");
	printf("---------------------------\n");
    printf("|    1:返回英语界面         |\n");
    printf("|    2:退出程序             |\n");
    printf("---------------------------\n");
printf("请输入功能选项:\n");
int n6;
scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
   {printf("数据有误,重新输入:\n");
	 scanf("%s",d);
   }
  n6=StringToInt(d);
switch(n6)
{
	case 1: goto  loop3;break;
	case 2: goto  loop0;break;
}
break;

case 5:
	goto loop1;
}
//wordsbag test={"sadf","sdf",NULL};
//Made_Uknown_Wordsbag(&test);
Print_Uknown_Wordsbag();
}
if (n1==3)
{       loop0:
        system("cls");
        printf("**********************退出小学生学习系统*******************\n");
}

if(n1==4)
	{
	FILE *fin,*ftp;
    char a[1000];
    fin=fopen("D:\\danci.txt","r");//读打开原文件123.txt
    ftp=fopen("D:\\tmp.txt","w");//写打开临时文件tmp.txt
    if(fin==NULL || ftp==NULL){
        printf("打开文件失败!...\n");
        exit(0);
    }
    fclose(fin);
    fclose(ftp);
    remove("D:\\danci.txt");//删除原文件
    rename("D:\\tmp.txt","D:\\danci.txt");//将临时文件名改为原文件名

	printf("\n\n恭喜你,成功清除系统所有内容!");
	getch();   //不立刻退出窗口
	system("cls");
	printf("---------------------------\n");
    printf("|    1:返回主界面         |\n");
    printf("|    2:退出程序             |\n");
    printf("---------------------------\n");
    printf("请输入功能选项:\n");
    int n6;
    scanf("%s",d);
   while (!IsInteger(d)||StringToInt(d)>2||StringToInt(d)<0)
   {printf("数据有误,重新输入:\n");
	 scanf("%s",d);
   }
   int n7;
  n7=StringToInt(d);
  switch(n7)
{
	case 1: goto  loop1;break;
	case 2: goto  loop0;break;
}
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_38173631/article/details/105976242