SCL-90心理测试系统(基于c语言)

此为部分

#include "stdafx.h"
#include
#include
#include
#include  
#include
#include
#include"testw.h"

int flag=0;/*全局变量以实现全过程中识别不同的登陆身份*/
char Num[100];     //文件名信息,一旦测试者登录就记录,在秘钥匹配中记录
char nUm[30];




/******************管理员区分 待开发***********************************************************************************************************************************************/
/*typedef struct laoshi{
    char account[20];
    char passwd[20];
} *laoshiz,laoshi;
*/


//565存放试题库数据
struct shiti
{
 int num;
 char timu[100];
 char da[50];
 char db[50];
 char dc[50];
 char dd[50];
 char zd[4];
}st[200];


/*******************************************/
int load()/*加载数目*/
{
    FILE *fp;
    int i;
    if((fp=fopen("E:\\心理健康机构\\试题库\\试卷一.txt","rb"))==NULL)
    {
        printf("\n打开文件出错\n");
    }
  for(i=0;!feof(fp);i++)
  fread(&st,sizeof(struct shiti),1,fp); 
  fclose(fp);
  return(i-1);
}

/***************************************************************************************************************************************************************/
void putsall()/*显示所有记录*/
{
    int load();
    FILE *fp;
    int n,i;
    n=load();
    fp=fopen("E:\\心理健康机构\\试题库\\试卷一.txt","rb");
    for(i=0;isizeof(struct shiti),1,fp);
        printf("题目【%d】:%s\n【A】:%s\n【B】:%s\n【C】:%s\n【D】:%s\n【正确答案】%s\n",st[i].num,st[i].timu,st[i].da,st[i].db,st[i].dc,st[i].dd,st[i].zd);

    }
    fclose(fp);

}

/****************显示一条记录*************************************************************************************************************************************/
void xianshijilu(int i)
{
    printf("题目【%d】:%s\n【A】:%s\n【B】:%s\n【C】:%s\n【D】:%s\n",st[i].num,st[i].timu,st[i].da,st[i].db,st[i].dc,st[i].dd);

}

/*****************选题并做题和系统判卷***********************************************************************************************************************************/
void xuanti()
{    
    system("cls");
    void guanli();
    void add();
    void xianshijilu(int i);
    int load();
    int n,f,i,k,c;
    char ch[4];
    FILE *fp;
    f=load();
    if(f==0)
    {
        printf("\n\t\t目前试题库中无试题\n\t\t【1】添加。\n\t\t【2】退出\n");
        scanf("%d",&c);
        if(c==1)add();
        else exit(0);
    }
    printf("\n您要选择[?]道题(请务必小于试题库中的题目数量--目前只有%d道)",f);
    scanf("%d",&n); 
    system("cls");
    fp=fopen("shitiku.dat","ab+");
    for(i=0;isizeof(struct shiti),1,fp);
        xianshijilu(i);
        printf("请选择您第%d题的答案:",i+1);
        scanf("%s",ch);
        if(strcmp(ch,st[i].zd)==0)
        printf("恭喜您答对了!");
        else printf("很明显你答错了!");

    }
    printf("\n\t\t【1】继续做题\n\t\t【2】回主菜单以登录管理试题库\n");
    scanf("%d",&k);
    system("cls");
    switch(k)
        {
        case 1:xuanti();break;
        case 2:guanli();break;
        default:printf("退出?");

        }
    fclose(fp);
}

/****************添加试题**************************************************************************************************************************************/
void add() 
{
    //void zhucaidan();
    system("cls");
    void guanli();
    int i,n,k,j;
    FILE *fp;
    n=load();
    if(flag==0)
    {
        printf("您不是教师不能添加试题!\n");

        printf("\n正要返回测试首页………………………………………………………………\n");
        system("cls");
        zhucaidan();
    }
a:  printf("\n目前试题库中有【%d】道题目!!!\n",n);  
    if((fp=fopen("shitiku.dat","ab"))==NULL)  printf("\n打开文件出错\n");
      i=n+1;
      printf("\n");
      printf("请输入第%d道题信息:\n",i);
      printf("\t\t\t【序号】:");scanf("%d",&st[i].num);
      for(j=0;j<=n;j++)
      {
          if(st[i].num==st[j].num||st[i].num==0)
          {printf("不能输入0序号的题目或已有此题号的题目了请重新添加!\n");
          goto a;}

      }
      printf("\t\t\t【题目】:");scanf("%s",st[i].timu);
      printf("\t\t\t【答案A】:");scanf("%s",st[i].da);
      printf("\t\t\t【答案B】:");scanf("%s",st[i].db);
      printf("\t\t\t【答案C】:");scanf("%s",st[i].dc);
      printf("\t\t\t【答案D】:");scanf("%s",st[i].dd);
      printf("\t\t\t【正确答案是:】:");scanf("%s",st[i].zd);//printf("\n");
      system("cls");
      printf("您添加的试题为:");
      printf("\n\t\t【题目】:%s\n\t\t【答案A】:%s\n\t\t【答案B】:%s\n\t\t【答案C】:%s\n\t\t【答案D】:%s\n\t\t【正确答案是:】:%s\n",st[i].timu,st[i].da,st[i].db,st[i].dc,st[i].dd,st[i].zd);

        if(fwrite(&st[i],sizeof(struct shiti),1,fp)==1)
        printf("保存成功!\n");
        fclose(fp); 
        printf("\t\t【1】继续添加\n\t\t【2】返回管理首页\n\t\t【3】后退\n");
        scanf("%d",&k);
        system("cls");
        switch(k)
        {
        case 1:add();break;
        case 3:guanli();break;
        case 2:laoshicaidan();break;
        default:default1();
        }

}    

/*************修改试题*******************************************************************************************************************************/
void modify()
{
    void guanli();
    int a,i,n,m,h,flag2=0;FILE *fp;static d;
W:  putsall();
    n=load();
    printf("\n\t\t请输入要修改的题目序号:\n");
    fp=fopen("E:\\心理健康机构\\试题库\\试卷一.txt","rb+");
    scanf("%d",&a);
    for(i=0;iif(a==st[i].num)
        {
        xianshijilu(i);
        printf("\n【正确答案】:%s",st[i].zd);
        d=i;
        flag2=1;break; 
        }
        else flag2=0;
    }

    if(flag2==1)
    {
Q:      
        printf("\n\t\t请输入要修改的项目:\n\n");
        printf("\t\t【1】题目\n");
        printf("\t\t【2】A选项\n");
        printf("\t\t【3】B选项\n");
        printf("\t\t【4】C选项\n");
        printf("\t\t【5】D选项\n");
        printf("\t\t【6】正确答案\n");
        fread(&st[d],sizeof(struct shiti),1,fp);
        scanf("%d",&m);printf("测试出错地方语句%d",d);
        st[d].num=d;
        if(m==1)
        {
            printf("请输入修改后的题目:\n");
            scanf("%s",st[d].timu);


        }
        else if(m==2)
        {
            printf("请输入修改后的A选项:\n");
            scanf("%s",st[d].da);

        }

        else if(m==3)
        {
            printf("请输入修改后的B选项:\n");
            scanf("%s",st[d].db);
        }
        else if(m==4)
        {
            printf("请输入修改后的C选项:\n");
            scanf("%s",st[d].dc);
        }
        else if(m==5)
        {
            printf("请输入修改后的D选项:\n");
            scanf("%s",st[d].dd);
        }
            else if(m==6)
        {
            printf("请输入修改后的正确答案:\n");
            scanf("%s",st[d].zd);
        }

        fclose(fp);
        fp=fopen("shitiku.dat","wb");
        for(i=0;isizeof(struct shiti),1,fp);
        fclose(fp);
        printf("\n修改成功!\n");
        printf("\n\t\t【1】继续修改本题\n\t\t【2】修改其他题目\n\t\t【3】返回管理主菜单\n\t\t【4】去做题\n\t\t");
        scanf("%d",&h);
        system("cls");
        switch(h)
        {case 1:goto Q;break;
        case 2:goto W;break;
        case 3:guanli();break;
        case 4:xuanti();break;
        }
}
      else 
      {
           printf("\n\t\t无此序号的题目!\n\t\t正在返回管理界面………………………\n");
           guanli();
      }
}

/*********删除试题的函数*********************************************************************************************************************************/

void del()
{
    void guanli();
    int a,n,i,k,j,c,ch;FILE *fp;FILE *fp1;int flag1=0;
    n=load();
    if(n==0)/*n=0的情况*/
    {   system("cls");
        printf("\n\t\t目前试题库中无试题");
        Sleep(2000);
        system("cls");
        printf("\n\t\t【1】后退\n\t\t【2】退出\n");
        scanf("%d",&c);
        if(c==1)   guanli();
        else if(c==1&&flag==0)printf("您不是教师不能添加试题!");
        else exit(0);
    }
    else if(n==1)/*n=1的情况*/
    {
        putsall();
        printf("\n\t\t只有一道题目按任意【数字键】删除\n\t\t【其他键】回到主菜单\n");
        scanf("%d",&ch);
        void zhucaidan();
            if(ch>=0&&ch<=9)
            {
              fp=fopen("shitiku.dat","w");
              fclose(fp);
              fp=fopen("shitiku.dat","rb+");
              fclose(fp);
              printf("\n\t\t删除操作成功\n\t正在重新回到主菜单………………………\n");
              zhucaidan();
            }
            else 
            {
                printf("\n\t\t删除操作成功\n\t正在重新回到主菜单………………………\n");
                system("cls");
                zhucaidan();
            }

    }
else
{
    putsall();
    printf("\n\t请输入您要删除的题序号(谨慎操作不可恢复):\n");
    scanf("%d",&a);
    fp=fopen("shitiku.dat","rb");
    for(i=0;iif(a==st[i].num)
    {     flag1=1;
          break;}
    }
    if(flag1==0)
    {
      printf("\n\t无此题号的题目正在重新回到主菜单………………………\n");
      guanli();
    }
      fclose(fp);

if(flag1==1)
{   fp=fopen("shitiku.dat","rb+");
    if(a==st[n-1].num)
    {
        for(j=0;j1;j++)
        {
                 st[j].num=st[j].num;
                 strcpy(st[j].timu,st[j].timu);
                 strcpy(st[j].da,st[j].da);
                 strcpy(st[j].db,st[j].db);
                 strcpy(st[j].dc,st[j].dc);
                 strcpy(st[j].dd,st[j].dd);
                 strcpy(st[j].zd,st[j].zd);
         }  fclose(fp);
            fp1=fopen("shitiku.dat","wb");
            for(i=0;i1;i++)
            fwrite(&st[i],sizeof(struct shiti),1,fp1);
            fclose(fp1);
            fp1=fopen("shitiku.dat","rb+");
            fclose(fp1);
            puts("\n删除操作成功!\n接下来您可以:\n");
            printf("\t\t【1】继续删除试题\n\t\t【2】回主菜单\n\t\t【3】做题\n");
            scanf("%d",&k);
            system("cls");
            switch(k)
            {
            case 1:del();break;
            case 2:guanli();break;
            case 3: xuanti();break;
            }

    }
    else
    {
    for(i=0;i1;i++)
    {
        if(a==st[i].num)

        {    k=i;
             for(j=k;j1;j++)
             {
                 st[j].num=st[j+1].num;
                 strcpy(st[j].timu,st[j+1].timu);
                 strcpy(st[j].da,st[j+1].da);
                 strcpy(st[j].db,st[j+1].db);
                 strcpy(st[j].dc,st[j+1].dc);
                 strcpy(st[j].dd,st[j+1].dd);
                 strcpy(st[j].zd,st[j+1].zd);
              }

             fclose(fp);
             fp1=fopen("shitiku.dat","wb");
             for(i=0;i1;i++)
            fwrite(&st[i],sizeof(struct shiti),1,fp1);
            fclose(fp1);
            puts("\n删除操作成功!\n接下来您可以:\n");
            printf("\t\t【1】继续删除试题\n\t\t【2】回主菜单\n\t\t【3】做题\n");
            scanf("%d",&k);
            system("cls");
            switch(k)
            {
            case 1:del();break;
            case 2:guanli();break;
            case 3: xuanti();break;
            }
        }/*if语句的括号*/


    }/*for循环的括号*/

}/*else的括号*/
}/*if(flag1==1)的括号*/
}/*整个else(n不等于0跟1的情况)的括号*/  
}/*整个删除数据函数的括号*/
/***********************************题库管理的主菜单**********************************************************************************************************/
void guanli()
{
    int n;
    system("cls");
    printf("\n\t\t【1】增加\n\t\t【2】删除\n\t\t【3】修改\n\t\t【4】后退");
    scanf("%d",&n);
    switch(n)
    {case 1:add();break;
     case 2:del();break;
     case 3:modify();break;
     case 4:shijuanguanli(); break;
     default:exit(0);
    }
}



/*****************测试者首页********************************************************************************************************************************************/

void xueshengcaidan()
{
     int c;

    //xuanti();
    system("cls");
    printf("【1】修改个人信息\n【2】进行测试\n【3】查询成绩");
    printf("\n");
    scanf("%d",&c);
   switch(c)
         { case 1: Change(); break;
           case 2:jinxingceshi(); break;
           case 3:chaxunchengji(); break;
           default:default1();
         }
}

/*******************************************************************************************************************************************************************/
void chaxunchengji()
{   system("cls");
    int time[4];
    printf("请输入您想查找的时间:");
    scanf("%d %d %d %d",&time[0],&time[1],&time[2],&time[3]);
    FILE *fp;
    fp=fopen(Num,"r");
    ceji t;
    stu s;
    fenxi v;
    int f,e;
     int i,p;
    fread(&s,sizeof(stu),1,fp);
    while(!feof(fp))
    {
        fread(&t,sizeof(ceji),1,fp);
         if(time[0]==t.time[0]&&time[1]==t.time[1]&&time[2]==t.time[2]&&time[3]==t.time[3] )
       { 
                  // j++;
                   //p==1;
                   for(i=1;i<91;i++)
                   printf("%d ",t.grade[i]);
                   while(!feof(fp))
                   {
                         fread(&v,sizeof(fenxi),1,fp);
                          printf("\n测评总分为:%f\n总均分为%f\n阳性数目数为%f\n阴性项目数:%f\n阳性症状均分:%f\n\n\n",v.Grade[0],v.Grade[1],v.Grade[2],v.Grade[3],v.Grade[4]);
                        break;
                   }
                    if(v.Grade[0]>=160||v.Grade[2]>=43||e==1)
                    {
                       printf("您的测评结果为阳性,建议您做进一步阳性筛查。\n");

                    }
                   printf("\n\n\t【1】查看详细结果\n\t【0】后退\n");
                   scanf("%d",&f);
           if(f==1)
           {
             printf("躯体化因子分为:%d\n该因子主要反映身体不适感,包括心血管、胃肠道、呼吸和其他系统的主诉不适,和头痛、背痛、肌肉酸痛,以及焦虑的其他躯体表现。\n",v.factor[1]);
             printf("强迫症状因子分为:%d\n该因子主要指那些明知没有必要,但又无法摆脱的无意义的思想、冲动和行为;还有一些比较一般的认知障碍的行为征象也在这一因子中反映。\n",v.factor[2]);
             printf("人际关系敏感因子分为:%d\n该因子主要指某些个人不自在与自卑感,特别是与其他人相比较时更加突出。在人际交往中的自卑感,心神不安,明显不自在,以及人际交流中的自我意识,消极的期待亦是这方面症状的典型原因。\n",v.factor[3]);
             printf("抑郁因子分为:%d\n苦闷的情感与心境为代表性症状,还以生活兴趣的减退,动力缺乏,活力丧失等为特征。以反映失望,悲观以及与抑郁相联系的认知和躯体方面的感受。另外,还包括有关死亡的思想和自杀观念。\n",v.factor[4]);
             printf("焦虑因子分为:%d\n该因子-般指那些烦燥,坐立不安,神经过敏,紧张以及由此产生的躯体征象,如震颤等。测定游离不定的焦虑及惊恐发作是本因子的主要内容,还包括一项解体感受的项目。\n",v.factor[5]);
             printf("敌对因子分为:%d\n该因子主要从三个方面来反映敌对的表现:思想,感情及行为。其项目包括厌烦的感觉,摔物,争论直到不可控制的脾气暴发等各方面。\n",v.factor[6]);
             printf("恐怖因子分为:%d\n恐惧的对象包括出门旅行,空旷场地,人群,或公共场所和交通工具。此外,还有反映社交恐怖的一些项目。\n",v.factor[7]);
             printf("偏执因子分为:%d\n本因子是围绕偏执性思维的基本特征而制订:主要指投射性思维,敌对,猜疑,关系观念,妄想,被动体验和夸大等。\n",v.factor[8]);
             printf("精神病性因子分为:%d\n该因子反映各式各样的急性症状和行为,有代表性地视为较隐讳,限定不严的精神病性过程的指征。此外,也可以反映精神病性行为的继发征兆和分裂性生活方式的指征。\n",v.factor[9]);

           }
           else   xueshengcaidan();break;
         }
         else {printf("无此次考试成绩!");  break;}
    } 
    printf("\t【1】后退\n\t【2】退出系统\n");
    scanf("%d",&p);
    switch(p)
    {
       case 1:xueshengcaidan();break;
       case 2:zhucaidan();break;
    }
}


/*******************测试者身份核实************************************************************************************************************************************/
  void check2()
 { 
    system("cls");
    char a[10];
    printf("请输入学号:");
    scanf("%s",a);
    FILE *fp;
    char w[100]="E:\\心理健康机构\\测试者信息\\";
    strcat(w,a); 
    strcat(w,".txt");
    fp=fopen(w,"ab+");
    stu s;
    fread(&s,sizeof(stu),1,fp);
    system("cls");
   if (strcmp(a,s.num)!=0)
  {
       printf("不存在此用户!");
       Sleep(2000);
       system("cls");
       printf("  正在返回主菜单.............................................");
       Sleep(2000);
       system("cls");
       zhucaidan() ;
  }

     char str21[20];
     printf("请输入密码:");
    scanf("%s",str21);
         system("cls");
   if (strcmp(str21,s.passwd)==0)

   {
       flag=0;                   //确认身份
       printf("密码正确√");
       strcpy(Num,w);       //保持
         strcpy(nUm,a);
       Sleep(3000);
       system("cls");
       xueshengcaidan();
   }
   else {
       printf("密码错误!");
       Sleep(1000);
       system("cls");
       printf("  正在返回主菜单.............................................");
       Sleep(3000);
       system("cls");
       zhucaidan() ;}
}


/******管理员秘钥匹配(核实密码)*************************************************************************************************************************************/

void check1()
{

      system("cls");
      char str11[10],str12[10]="123";
      printf("请输入密码:");
    scanf("%s",str11);
         system("cls");
   if (strcmp(str11,str12)==0)

   {
       flag=1; 
       printf("密码正确√");
       Sleep(3000);
       system("cls");
       laoshicaidan();

   }
   else {
       printf("密码错误!");
       Sleep(1000);
       system("cls");
       printf("  正在返回主菜单.............................................");
      Sleep(3000);
   system("cls");
   zhucaidan() ;}
}


/************管理者首页*******************************************************************************************************************************************/
void laoshicaidan()
{
        int ch2;
        system("cls");
        printf("\n\n\t\t        【1】试卷管理\n\t\t        【2】测试者管理\n\t\t        【3】退出管理\n\t\t");  
        printf("\n\t\t填框: ");
        scanf("%d",&ch2);
         switch(ch2)
         { case 1:shijuanguanli();break;
           case 2:ceshizheguanli();break;
           case 3:system("cls"); zhucaidan();break;
           default:default2();
         }
}
/***************试卷管理**************************************************************************************************************************************/

void shijuanguanli()
{
    int c;
    system("cls");
    printf("\n\t\t 【1】题库管理\n\t\t 【2】做题并查看质量和修改\n\t\t 【3】后退\n\t\t");
    printf("填框: ");
    scanf("%d",&c);
    switch(c)
         { case 1:guanli();break;
           case 2:xuanti();break;
           case 3:laoshicaidan();break;
           default:exit(0);
         }
}

/***********测试者管理*********************************************************************************************************************************************/

void ceshizheguanli()
{
    int c;
    system("cls");
    printf("\n\t\t 【1】查看测试者基本信息\n\t\t 【2】管理测试者基本信息\n\t\t 【3】查看成绩 \n\t\t 【4】后退\n\t\t");
    printf("\n填框: ");
    scanf("%d",&c);
    switch(c)
         { case 1:ceshizhejibenxinxi();break;
           case 2:guanliceshizhe();break;
           case 3:guanliyuanchakanchenhji();break;
           case 4:laoshicaidan();break;
           default:exit(0);
         }
}


/************测试者基本信息************************************************************************************************************************************/
void ceshizhejibenxinxi()
{   system("cls");
    stu s;
    int f;
    FILE *fp;
    fp=fopen("E:\\心理健康机构\\测试者信息\\总信息.txt","ab+");   
    while(1)
    {
        fread(&s,sizeof(stu),1,fp);
        if(feof(fp))  
            break;
    printf("状态:%d 学号:%s姓名:%s班级:%个人电话:%s班主任:%s班主任电话:%s\n",s.exit ,s.num,s.name,s.classg,s.stuphone,s.teaName,s.teaphone);
    }
    printf("\n\t\t【1】返回上一层\n\t\t【2】退出管理\n\t");
    scanf("%d",&f);
    switch(f)
    { 
       case 1:ceshizheguanli();break;
       case 2:zhucaidan();break;
    }
}

/****************管理测试者*********************************************************************************************************************************/

void guanliceshizhe()
{
   int c;
   system("cls");
   printf("\n\t\t【1】删除用户记录\n\t\t【2】修改用户信息\n\t\t【3】增加用户\n\t\t【4】后退\n\t\t");
   printf("填框: ");
   scanf("%d",&c);
   switch(c)
    {
        case 1:Delete();break;
        case 2:Change();break;
        case 3:zhuce();break;
        case 4:ceshizheguanli();break;
        default:exit(0);
    }
}


/*******查看成绩**********************************************************************************************************************************************/
void guanliyuanchakanchenhji()
{   system("cls");
    int time[4];
    char a[30];
    int p;
    printf("请输入想要找的学号:");
    scanf("%s",a);
    FILE *fp;
    char w[100]="E:\\心理健康机构\\测试者信息\\";
    strcat(w,a); 
    strcat(w,".txt");
    fp=fopen(w,"r");

     printf("【1】不安时间查\n【2】按时间查");
     scanf("%d",&p);
       if(p==1)
         {  ceji t;
             stu s;
            fenxi v;
            int f,e;
               int i,p;
                  fread(&s,sizeof(stu),1,fp);
                 while(!feof(fp))
                 {
                      fread(&t,sizeof(ceji),1,fp);

                  // j++;
                   //p==1;
                   for(i=1;i<91;i++)
                   printf("%d ",t.grade[i]);
                   while(!feof(fp))
                   {
                         fread(&v,sizeof(fenxi),1,fp);
                          printf("\n测评总分为:%f\n总均分为均分为%f\n阳性数目数为%f\n阴性项目数:%f\n阳性症状均分:%f\n\n\n",v.Grade[0],v.Grade[1],v.Grade[2],v.Grade[3],v.Grade[4]);
                        break;
                   }
                    if(v.Grade[0]>=160||v.Grade[2]>=43||e==1)
                    {
                       printf("您的测评结果为阳性,建议您做进一步阳性筛查。\n");

                    }
                   printf("\n\n\t【1】查看详细结果\n\t【0】后退\n");
                   scanf("%d",&f);
              if(f==1)
             {
             printf("\n\n\n\n躯体化因子分为:%d\n该因子主要反映身体不适感,包括心血管、胃肠道、呼吸和其他系统的主诉不适,和头痛、背痛、肌肉酸痛,以及焦虑的其他躯体表现。\n",v.factor[1]);
             printf("强迫症状因子分为:%d\n该因子主要指那些明知没有必要,但又无法摆脱的无意义的思想、冲动和行为;还有一些比较一般的认知障碍的行为征象也在这一因子中反映。\n",v.factor[2]);
             printf("人际关系敏感因子分为:%d\n该因子主要指某些个人不自在与自卑感,特别是与其他人相比较时更加突出。在人际交往中的自卑感,心神不安,明显不自在,以及人际交流中的自我意识,消极的期待亦是这方面症状的典型原因。\n",v.factor[3]);
             printf("抑郁因子分为:%d\n苦闷的情感与心境为代表性症状,还以生活兴趣的减退,动力缺乏,活力丧失等为特征。以反映失望,悲观以及与抑郁相联系的认知和躯体方面的感受。另外,还包括有关死亡的思想和自杀观念。\n",v.factor[4]);
             printf("焦虑因子分为:%d\n该因子-般指那些烦燥,坐立不安,神经过敏,紧张以及由此产生的躯体征象,如震颤等。测定游离不定的焦虑及惊恐发作是本因子的主要内容,还包括一项解体感受的项目。\n",v.factor[5]);
             printf("敌对因子分为:%d\n该因子主要从三个方面来反映敌对的表现:思想,感情及行为。其项目包括厌烦的感觉,摔物,争论直到不可控制的脾气暴发等各方面。\n",v.factor[6]);
             printf("恐怖因子分为:%d\n恐惧的对象包括出门旅行,空旷场地,人群,或公共场所和交通工具。此外,还有反映社交恐怖的一些项目。\n",v.factor[7]);
             printf("偏执因子分为:%d\n本因子是围绕偏执性思维的基本特征而制订:主要指投射性思维,敌对,猜疑,关系观念,妄想,被动体验和夸大等。\n",v.factor[8]);
             printf("精神病性因子分为:%d\n该因子反映各式各样的急性症状和行为,有代表性地视为较隐讳,限定不严的精神病性过程的指征。此外,也可以反映精神病性行为的继发征兆和分裂性生活方式的指征。\n",v.factor[9]);

             }
             else  ceshizheguanli();//break;
         }
       }



       if(p==2)
    {
        printf("请输入您想查找的时间:");
        scanf("%d %d %d %d",&time[0],&time[1],&time[2],&time[3]);
        ceji t;
    stu s;
    fenxi v;
    int f,e;
     int i,p;
    fread(&s,sizeof(stu),1,fp);
    while(!feof(fp))
    {
        fread(&t,sizeof(ceji),1,fp);
         if(time[0]==t.time[0]&&time[1]==t.time[1]&&time[2]==t.time[2]&&time[3]==t.time[3] )
       { 
                  // j++;
                   //p==1;
                   for(i=1;i<91;i++)
                   printf("%d ",t.grade[i]);
                   while(!feof(fp))
                   {
                         fread(&v,sizeof(fenxi),1,fp);
                          printf("\n测评总分为:%f\n总均分为%f\n阳性数目数为%f\n阴性项目数:%f\n阳性症状均分:%f\n\n\n",v.Grade[0],v.Grade[1],v.Grade[2],v.Grade[3],v.Grade[4]);
                        break;
                   }
                    if(v.Grade[0]>=160||v.Grade[2]>=43||e==1)
                    {
                       printf("您的测评结果为阳性,建议您做进一步阳性筛查。\n");

                    }
                   printf("\n\n\t【1】查看详细结果\n\t【0】后退\n");
                   scanf("%d",&f);
           if(f==1)
           {
             printf("\n\n\n\n躯体化因子分为:%d\n该因子主要反映身体不适感,包括心血管、胃肠道、呼吸和其他系统的主诉不适,和头痛、背痛、肌肉酸痛,以及焦虑的其他躯体表现。\n",v.factor[1]);
             printf("强迫症状因子分为:%d\n该因子主要指那些明知没有必要,但又无法摆脱的无意义的思想、冲动和行为;还有一些比较一般的认知障碍的行为征象也在这一因子中反映。\n",v.factor[2]);
             printf("人际关系敏感因子分为:%d\n该因子主要指某些个人不自在与自卑感,特别是与其他人相比较时更加突出。在人际交往中的自卑感,心神不安,明显不自在,以及人际交流中的自我意识,消极的期待亦是这方面症状的典型原因。\n",v.factor[3]);
             printf("抑郁因子分为:%d\n苦闷的情感与心境为代表性症状,还以生活兴趣的减退,动力缺乏,活力丧失等为特征。以反映失望,悲观以及与抑郁相联系的认知和躯体方面的感受。另外,还包括有关死亡的思想和自杀观念。\n",v.factor[4]);
             printf("焦虑因子分为:%d\n该因子-般指那些烦燥,坐立不安,神经过敏,紧张以及由此产生的躯体征象,如震颤等。测定游离不定的焦虑及惊恐发作是本因子的主要内容,还包括一项解体感受的项目。\n",v.factor[5]);
             printf("敌对因子分为:%d\n该因子主要从三个方面来反映敌对的表现:思想,感情及行为。其项目包括厌烦的感觉,摔物,争论直到不可控制的脾气暴发等各方面。\n",v.factor[6]);
             printf("恐怖因子分为:%d\n恐惧的对象包括出门旅行,空旷场地,人群,或公共场所和交通工具。此外,还有反映社交恐怖的一些项目。\n",v.factor[7]);
             printf("偏执因子分为:%d\n本因子是围绕偏执性思维的基本特征而制订:主要指投射性思维,敌对,猜疑,关系观念,妄想,被动体验和夸大等。\n",v.factor[8]);
             printf("精神病性因子分为:%d\n该因子反映各式各样的急性症状和行为,有代表性地视为较隐讳,限定不严的精神病性过程的指征。此外,也可以反映精神病性行为的继发征兆和分裂性生活方式的指征。\n",v.factor[9]);

           }
           else  ceshizheguanli();break;
         }
         else {printf("无此次考试成绩!");  break;}
    } 
    printf("\t【1】后退\n\t【2】退出系统\n");
    scanf("%d",&p);
    switch(p)
    {
       case 1:ceshizheguanli();break;
       case 2:zhucaidan();break;
    }
    }//if(p==2)
}




/************录入成绩**************************************************************************************************************************/

void chankanchengji(ceji t)
{
    FILE *fp,*fa;
    fp=fopen("E:\\心理健康机构\\结果分析\\分析.txt","ab+");
    fa=fopen(Num,"ab+");
    int i=0,e=0,f=0;
    fenxi v;
    for(i=0;i<10;i++)
      v.factor[i]=0; 
    for(i=0;i<5;i++)
      v.Grade [i]=0; 
    for(i=1;i<91;i++)
    {
        v.Grade[0]+=t.grade[i];
        if(t.grade[i]>=2)       
            v.Grade [2]++;      
        else
          v.Grade [3]++;
        if(i==1||i==4||i==12||i==27||i==40||i==42||i==48||i==49||i==52||i==53||i==56||i==58)
        v.factor[1]+=t.grade[i];
        else if(i==3||i==9||i==10||i==28||i==38||i==45||i==46||i==51||i==55||i==65)
        v.factor[2]+=t.grade[i];
        else if(i==6||i==21||i==34||i==36||i==37||i==41||i==61||i==69||i==73)
        v.factor[3]+=t.grade[i];
        else if(i==5||i==14||i==15||i==20||i==22||i==26||i==29||i==30||i==3l||i==32||i==54||i==7l||i==79)
        v.factor[4]+=t.grade[i];
        else if(i==2||i==17||i==23||i==33||i==39||i==57||i==72||i==78||i==80||i==86)
        v.factor[5]+=t.grade[i];
        else if(i==11||i==24||i==63||i==67||i==74||i==8l)
        v.factor[6]+=t.grade[i];
        else if(i==13||i==25||i==47||i==50||i==70||i==75||i==82)
        v.factor[7]+=t.grade[i];
        else if(i==8||i==18||i==43||i==68||i==76||i==83)
        v.factor[8]+=t.grade[i];
        else if(i==7||i==16||i==35||i==62||i==77||i==84||i==85||i==87||i==88||i==90)
        v.factor[9]+=t.grade[i]; 
        else
        v.factor[0]+=t.grade[i];        
    }


    v.Grade [1]=v.Grade[0]/90;
    v.Grade [4]=(v.Grade[0]-v.Grade [3])/v.Grade [2];
    v.factor[0]=v.factor[0]/7;
    v.factor[1]=v.factor[1]/12;
    v.factor[2]=v.factor[2]/10;
    v.factor[3]=v.factor[3]/9;
    v.factor[4]=v.factor[4]/13;
    v.factor[5]=v.factor[5]/10;
    v.factor[6]=v.factor[6]/6;
    v.factor[7]=v.factor[7]/7;
    v.factor[8]=v.factor[8]/6;
    v.factor[9]=v.factor[9]/10;
    fwrite(&v,sizeof(fenxi),1,fa);
    fwrite(&v,sizeof(fenxi),1,fp);
    fclose(fa);
    fclose(fp); 
    printf("测评总分为:%f\t\t\n总均分为:%f\t\t\n阳性数目数为%f\t\t\n阴性项目数:%f\t\t\n阳性症状均分:%f\n\t\t",v.Grade[0],v.Grade[1],v.Grade[2],v.Grade[3],v.Grade[4]);
    for(i=0;i<10;i++)
    {if(v.factor[i]>2)
    e=1;
    }
    if(v.Grade[0]>=160||v.Grade[2]>=43||e==1)
    {
        printf("您的测评结果为阳性,建议您做进一步阳性筛查。\n");

    }
    printf("\n\t【1】查看详细结果\n\t【2】退出系统\n");
    scanf("%d",&f);
    if(f==1)
    {
        printf("躯体化因子分为:%d\n该因子主要反映身体不适感,包括心血管、胃肠道、呼吸和其他系统的主诉不适,和头痛、背痛、肌肉酸痛,以及焦虑的其他躯体表现。\n",v.factor[1]);
        printf("强迫症状因子分为:%d\n该因子主要指那些明知没有必要,但又无法摆脱的无意义的思想、冲动和行为;还有一些比较一般的认知障碍的行为征象也在这一因子中反映。\n",v.factor[2]);
        printf("人际关系敏感因子分为:%d\n该因子主要指某些个人不自在与自卑感,特别是与其他人相比较时更加突出。在人际交往中的自卑感,心神不安,明显不自在,以及人际交流中的自我意识,消极的期待亦是这方面症状的典型原因。\n",v.factor[3]);
        printf("抑郁因子分为:%d\n苦闷的情感与心境为代表性症状,还以生活兴趣的减退,动力缺乏,活力丧失等为特征。以反映失望,悲观以及与抑郁相联系的认知和躯体方面的感受。另外,还包括有关死亡的思想和自杀观念。\n",v.factor[4]);
        printf("焦虑因子分为:%d\n该因子-般指那些烦燥,坐立不安,神经过敏,紧张以及由此产生的躯体征象,如震颤等。测定游离不定的焦虑及惊恐发作是本因子的主要内容,还包括一项解体感受的项目。\n",v.factor[5]);
        printf("敌对因子分为:%d\n该因子主要从三个方面来反映敌对的表现:思想,感情及行为。其项目包括厌烦的感觉,摔物,争论直到不可控制的脾气暴发等各方面。\n",v.factor[6]);
        printf("恐怖因子分为:%d\n恐惧的对象包括出门旅行,空旷场地,人群,或公共场所和交通工具。此外,还有反映社交恐怖的一些项目。\n",v.factor[7]);
        printf("偏执因子分为:%d\n本因子是围绕偏执性思维的基本特征而制订:主要指投射性思维,敌对,猜疑,关系观念,妄想,被动体验和夸大等。\n",v.factor[8]);
        printf("精神病性因子分为:%d\n该因子反映各式各样的急性症状和行为,有代表性地视为较隐讳,限定不严的精神病性过程的指征。此外,也可以反映精神病性行为的继发征兆和分裂性生活方式的指征。\n",v.factor[9]);
         printf("\n\t\t【1】返回上一层\n\t\t【2】退出系统\n\t");
         scanf("%d",&f);
         switch(f)
         { 
           case 1:xueshengcaidan();break;
           case 2:zhucaidan();break;
         }
    }
    else zhucaidan();

}


/*************************************主菜单********************************************************************************************************************/
  void zhucaidan() 
{
    int c;

    system ("color 1E");
    printf("              ***************************************************\n");
    printf("\t\t            欢迎来到心理健康测试系统\n\n");
    printf("\t\t                测试者登录请按【1】\n                         \t管理员登录请按【2】\n\t\t\t        新用户注册请按【3】\n\t\t\t        关闭测试系统按【4】\n\t\t");
    printf("填框: ");
    scanf("%d",&c);
    //system("cls");
    switch(c)
    {  
       case 1:check2();break;
       case 2: check1();break;
       case 4: close();break;
       case 3: zhuce();break;
       default:default1();
    }   

}

/******************************************************************************************************************************************************************/


/*

*/


/*

 */




/********系统关闭提醒*************************************************************************************************************************************************/



void close()
{
    system("cls");
    printf("系统关闭!");
    Sleep(2);
    printf("\n");
}

/******错误选择按钮**************************************************************************************************************************************************/


void default1()
{    system("cls");
     printf("无此操作!");
     Sleep(1000);
     system("cls");
     zhucaidan() ;

}


/************错误选择按钮*************************************************************************************************************************************/
void default2()
{    system("cls");
     printf("无此操作!");
     Sleep(1000);
     system("cls");
     laoshicaidan();

}

/*****************************************待开发**************************************************************************************************************************

//随机数组题take_tests.c
# include "my_head.h"
void take_tests()                            //随机数组题
{
    static int n, l, m, c, L;
    int g;
    srand( (unsigned)time( NULL ) );         //产生不同的随机数
    system("cls");
    printf ("请输入需要几套试卷:");
    n = scanf("%d",&g);
    if (i <= 10)
    {
        printf ("题目不足!\n回车键返回……");
        getchar();
        return ;
    }
    for (j = 1; j <= n; j ++)
    {
        L = 1;  
        do
        {
            m = 0;
            c = rand()%i + 1;                 //生成随机数
            for(l = 1; l < L; l ++)
            {
                if(c == ts[j][l])
                    m ++;
            }
            if(m == 0)
            {
                ts[j][L] = c;
                L++;
            }       
        }while(L != 11);
    }
    j -= 1;
    printf ("\n已生成%d套试卷!\n回车键返回……",n);
    getchar();
    return ;
}

/******************删除用户**********************************************************************************************************************************************/
void  Delete() 
{   
    system("cls");
    char a[10];
    stu s;
    printf("请输入学号:");
    scanf("%s",a);
    FILE *fp;
    char w[100]="E:\\心理健康机构\\测试者信息\\";
    strcat(w,a); 
    strcat(w,".txt");
    fp=fopen(w,"ab+");
    fread(&s,sizeof(stu),1,fp);
    system("cls");
   if (strcmp(a,s.num)!=0)
  {
       printf("不存在此用户!");
       fclose(fp);
       remove(w);
       Sleep(2000);
       system("cls");
       guanliceshizhe();
  }
   else
   {

         fclose(fp);
         remove(w);//unlink(w);删除单个文件

       system("cls");
       printf("删除成功!");
      Sleep(3000);
      system("cls");
      guanliceshizhe();
   }
} 

/***********考试函数********************************************************************************************************************************************************/
void  jinxingceshi()
{
  system("cls");
  char qidong;
  int Sa;
  char q;
  FILE *fb,*fa;
  fa=fopen(Num,"ab+");
 fb=fopen("E:\\心理健康机构\\试题库\\题.txt","r");
 char s[100];
 int count=1;
 ceji a;
 int i;
 for(i=0;i<91;i++)
    a.grade[i]=0; 
    time_t t;
    struct tm *lt;
    time (&t);// linux获取时间戳。
    lt = localtime (&t);    //转化
    a.time[0]= lt->tm_year+1900;
    a.time[1]=lt->tm_mon+1;
    a.time[2]=lt->tm_mday;
    a.time[3]=lt->tm_hour;
    printf("请根据程度用下面序号作答!\n\n");
    printf("程度分五等,分别如下:\n\n");
    printf("1-没有、2-很轻、3-中等、4-偏重、5-严重\n\n") ;
    printf("请按空格键开始测试!\n");
    while(1)
     {
          qidong=getchar();
          if(qidong==' ')
              break;
     }

     system("cls");
     printf("测试即将开始!");
     Sleep(3000);
     system("cls");
 while(!feof(fb))
    {
      fscanf(fb,"%s",s);
      printf("\t%s\n",s);
      printf("填框:");
      scanf("%d",&a.grade[count] );
      a.grade[0]+=a.grade[count];
      count++; 
      system("cls");
    } 
      printf("测试结束!");    
      fwrite(&a,sizeof(ceji),1,fa);
      fclose(fa);
      fclose(fb);
       Sleep(2000);
      system("cls");
      chankanchengji(a);
      printf("正在返回上一层!");
      Sleep(3000);
      system("cls");
      xueshengcaidan();
}


/*********************************************************************************************************************************************************/
void  Change()
{      system("cls");
       FILE *fp1,*fp2,*fa,*fb;
         char reset[10];
          char change[20];
          char a[10];
           char w[100]="E:\\心理健康机构\\测试者信息\\"; 
      if(flag==1) 
      {
          printf("请输入想要修改的用户账号:");
          scanf("%s",a);
          strcat(w,a); 
          strcat(w,".txt");
          fp1=fopen(w,"ab+");
      }
      else   fp1=fopen(Num,"ab+"); 
       fa=fopen("E:\\心理健康机构\\测试者信息\\单修改.txt","ab+");
       stu s;
       ceji t;
       fread(&s,sizeof(stu),1,fp1);
       printf("请输入您想要修改的信息:");
       scanf("%s",reset);
       printf("请输入您所修改的信息值:");
       scanf("%s",change);
       system("cls");
       fread(&s,sizeof(stu),1,fp1); 
       if(!strcmp(reset,"姓名")) 
              strcpy( s.name ,change);
       else if(!strcmp(reset,"班级"))  
              strcpy(s.classg ,change);
       else if(!strcmp(reset,"性别"))  
             strcpy(s.xb  ,change);  
      else if(!strcmp(reset,"电话"))  
             strcpy( s.stuphone ,change);  
      else if(!strcmp(reset,"班主任姓名"))  
            strcpy(s.teaName ,change); 
      else if(!strcmp(reset,"班主任联系方式"))  
             strcpy(s.teaphone  ,change); 
    fwrite(&s,sizeof(stu),1,fa);            
    while(1)
   {
     fread(&t,sizeof(ceji),1,fp1); 
     if(feof(fp1))  break;
     fwrite(&t,sizeof(ceji),1,fa);   
   }
    fclose(fa);
    fclose(fp1);
    if(flag==1)
    remove(w);
    else remove(Num);

    fp1=fopen(w,"ab+");
    fa=fopen("E:\\心理健康机构\\测试者信息\\单修改.txt","ab+");
    fread(&s,sizeof(stu),1,fa);
    fwrite(&s,sizeof(stu),1,fp1);
  while(1)
  {
   fread(&t,sizeof(ceji),1,fa); 
    if(feof(fa))  break;
    fwrite(&t,sizeof(ceji),1,fp1);   
  } 
  fclose(fa);
  fclose(fp1);
  remove("E:\\心理健康机构\\测试者信息\\单修改.txt"); 
  fp2=fopen("E:\\心理健康机构\\测试者信息\\总信息.txt","ab+");
  fb=fopen("E:\\心理健康机构\\测试者信息\\总修改.txt","ab+");
  while(1){
  fread(&s,sizeof(stu),1,fp2);
   if(feof(fp2))  break;
   if(!strcmp( s.num,a))
     {  if(!strcmp(reset,"姓名"))  //姓名  班级  性别  电话  班主任姓名  班主任联系方式
           strcpy( s.name ,change);
        else if(!strcmp(reset,"班级"))  
           strcpy(s.classg ,change);
        else if(!strcmp(reset,"性别"))  
           strcpy(s.xb  ,change);  
       else if(!strcmp(reset,"电话"))  
           strcpy( s.stuphone,change);  
        else if(!strcmp(reset,"班主任姓名"))  
           strcpy(s.teaName  ,change); 
            else if(!strcmp(reset,"班主任联系方式"))  
           strcpy(s.teaphone  ,change);  
    }

  fwrite(&s,sizeof(stu),1,fb); 
 }
fclose(fb);
    fclose(fp2);
    remove("E:\\心理健康机构\\测试者信息\\总信息.txt");
    fp2=fopen("E:\\心理健康机构\\测试者信息\\总信息.txt","ab+");
    fb=fopen("E:\\心理健康机构\\测试者信息\\总修改.txt","ab+");
while(1){
   fread(&s,sizeof(stu),1,fb); 
if(feof(fb))  break;
fwrite(&s,sizeof(stu),1,fp2);   
}
    fclose(fb);
    fclose(fp2);
    remove("E:\\心理健康机构\\测试者信息\\总修改.txt");  
    printf("修改完成!");
     Sleep(4000);
     system("cls");
      printf("正在返回上一层!");
      Sleep(3000);
      system("cls");
      guanliceshizhe();
}

/****************测试者注册注册注册***************************************************************************************************************************************/

void zhuce()
{
   system("cls");
   FILE *fp,*fb;
   printf("请输入学号:");
   char a[10];
   stu s;

   while(1) 
   {   scanf("%s",a);
      char w[100]="E:\\心理健康机构\\测试者信息\\";
      strcat(w,a); 
      strcat(w,".txt");
      fp=fopen(w,"ab+");
      fread(&s,sizeof(stu),1,fp);
      system("cls");

      if(strlen(a)==10)
      {   
              if (strcmp(a,s.num)==0)
              {    
                  printf("存在此用户!");
                  Sleep(3000);
                  system("cls");
                  printf("请重新输入!");
                  Sleep(2000);
                  system("cls");
                  printf("请输入学号:");
              }
              else
              {
                  strcpy(s.num,a);
                  break;
              }
      }
      else
      {
          printf("输入的学号位数错误,请重新输入:");
          Sleep(2000);
          system("cls");
          printf("请输入学号:");
      }
   }
    s.exit=1;               //存在
   printf("请输入密码:");
   scanf("%s",s.passwd );
   printf("请输入姓名:");
   scanf("%s",s.name);
   printf("请输入班级:");
   scanf("%s",s.classg);
   printf("请输入性别:");
   scanf("%s",s.xb);
   printf("请输入电话:");
   scanf("%s",s.stuphone);
   printf("请输入班主任姓名:");
   scanf("%s",s.teaName);
   printf("请输入班主任联系方式:");
   scanf("%s",s.teaphone);
   char w[100]="E:\\心理健康机构\\测试者信息\\";
   strcat(w,s.num); 
   strcat(w,".txt");
   fp=fopen(w,"ab+");
   fb=fopen("E:\\心理健康机构\\测试者信息\\总信息.txt","ab+");
   fwrite(&s,sizeof(stu),1,fp);
   fwrite(&s,sizeof(stu),1,fb);
   fclose(fp);
   fclose(fb);
   system("cls");
   if(flag==1)
   {  
       printf("添加成功!");
       Sleep(3000);
       system("cls");
       guanliceshizhe();
   }
   else
   {
       printf("恭喜您注册成功!");
       Sleep(3000);
       system("cls");
       zhucaidan();
   }
}



 /*************************************主菜单**********************************************************************************************************/

  void main()/*主函数*/
  {
     // zhucaidan();
      //介绍
      MessageBox (NULL,TEXT("\t为什么要有课设呀!\n\t真是的!这课设有用吗???\n"), TEXT("内心独白"),MB_ICONQUESTION|MB_YESNO);//注:图标在前,按钮在后。中间用"|"分割。
      MessageBox (NULL,TEXT(" \t答案毋庸置疑,是肯定的! "), TEXT("内心独白"),MB_YESNO);
      MessageBox (NULL,TEXT("重点来了,请注意! "), TEXT("重点"),MB_ICONWARNING   );
      MessageBox (NULL,TEXT("\t本系统由TFboy工作室制作\n\t版权所有, 侵权必究\n\t侵权举报电话:13700501421(翟先生)"), TEXT("版权声明"),MB_OK);//只有OK
      MessageBox (NULL,TEXT("欢迎使用此测试系统"), TEXT("欢迎"),MB_ICONWARNING );   
     /*
        按钮参数:
            MB_OK                 有一个"确定"在框里面
            MB_YESNO              有"是"和"否"在里面
            MB_ABORTRETRYIGNORE   有Abort(放弃),Retry(重试)和Ignore(跳过)在里面
            MB_YESNOCANCEL        有"是"和"否"和"取消"在里面 
            MB_RETRYCANCEL        有"重试"和"取消" 在里面
            MB_OKCANCEL           有"确定"和"取消"在里面
        返回值:
            按下的按钮       返回的值
            确定                1
            取消                2
            放弃                3
            重试                4
            跳过                5
            是                  6
            否                  7
    */

    /*
    图标:    
        MB_ICONEXCLAMATION    一个惊叹号出现在消息框    
        MB_ICONWARNING        一个惊叹号出现在消息框    
        MB_ICONINFORMATION    一个圆圈中小写字母i组成的图标出现在消息框    
        MB_ICONASTERISK       一个圆圈中小写字母i组成的图标出现在消息框    
        MB_ICONQUESTION       一个问题标记图标出现在消息框    
        MB_ICONSTOP           一个停止消息图标出现在消息框    
        MB_ICONERROR          一个停止消息图标出现在消息框    
        MB_ICONHAND           一个停止消息图标出现在消息框    
    */
     zhucaidan();
//   head = (stu *)malloc(sizeof(stu));                     // 头结点申请空间
 //    head->next = NULL;


  }

你可能感兴趣的:(C,操作系统及小系统)