初学C++做自用程序——心理学量表现在不只有一个了,函数应用

#include<iostream>//可拓展方向:识别文件,储存文件,结果判定,异常处理,复合量表,随机顺序,页面设计
#include<string>//用string数组,通过遍历数组来输出问题,通过读取空格/0或换行/n来插入回答与换行
using namespace std;
int scl()
{
string save;
cout << "\a指导语:以下表格中列出了有些人可能有的症状或问题,请仔细阅读每一条,然后根据该句话与您自己的实际情况相符合的程度(最近一个星期或现在),选择一个适当的数字(没有1,很轻2,中等3,偏重4,严重5)填写在后面的答案框中:" << endl;
cout << "输入任意文字内容(比如当前时间)开始" << endl;
cout << "手机中文输入法输入完整的“shijian”可以弹出时间哦" << endl;
cin >> save;
//初始化
float d[90];
string q[90];//看着就头大,要是能识别文件就不这么麻烦了
q[0]="1 头痛";
q[1]="2 神经过敏(定义:因日复一日的生活而暂时失调的紧张情形),心中不踏实";
q[2]="3头脑中有不必要的想法或字句(unwanted thoughts or ideas)盘旋(won’t leave your head)";
q[3]="4 头晕或晕倒";
q[4]="5 对异性(sexual interest or pleasure)的兴趣减退";
q[5]="6 对旁人责备求全";
q[6]="7感到别人(someone else)能控制您的思想";
q[7]="8 责怪别人制造麻烦";
q[8]="9 忘性大(truble remembering things)";
q[9]="10 担心自己的衣饰整齐及仪态的端正";
q[10]="11 容易烦恼和激动";
q[11]="12 胸痛(in heart or chest)";
q[12]="13 害怕空旷的场所或街道";
q[13]="14 感到自己的精力下降,活动减慢";
q[14]="15 想结束自己的生命";
q[15]="16 听到旁人听不到的声音";
q[16]="17 发抖";
q[17]="18 感到大多数人都不可信任";
q[18]="19 胃口不好";
q[19]="20 容易哭泣";
q[20]="21 同异性相处时感到害羞不自在";
q[21]="22 感到受骗,中了圈套或有人想抓住您(being trapped or caught)";
q[22]="23 无缘无故地突然感到害怕";
q[23]="24 自己不能控制地大发脾气";
q[24]="25 怕单独出门";
q[25]="26 经常责怪自己";
q[26]="27 腰(lower back)痛";
q[27]="28 感到难以完成任务";
q[28]="29 感到孤独";
q[29]="30 感到苦闷";
q[30]="31 过分担忧(worring too much about things)";
q[31]="32 对事物不感兴趣";
q[32]="33 感到害怕";
q[33]="34 您的感情容易受到伤害";
q[34]="35 旁人能知道您的私下想法";
q[35]="36 感到别人不理解您、不同情您";
q[36]="37 感到人们对您不友好,不喜欢您(unfriendly)";
q[37]="38 做事必须做得很慢(以保证做得正确)";
q[38]="39 心跳得很厉害(pounding or racing)";
q[39]="40 恶心或胃部不舒服";
q[40]="41 感到比不上他人";
q[41]="42 肌肉酸痛";
q[42]="43 感到有人在监视您、谈论您";
q[43]="44 难以入睡";
q[44]="45 (having to)做事必须反复检查";
q[45]="46 难以做出决定";
q[46]="47 怕乘电车、公共汽车、地铁或火车";
q[47]="48 呼吸有困难";
q[48]="49 一阵阵发冷或发热";
q[49]="50 因为感到害怕而避开某些东西、场合或活动";
q[50]="51 脑子变空了(mind going blank[空白的])";
q[51]="52 身体发麻或刺痛(parts of your body)";
q[52]="53 喉咙有梗塞感";
q[53]="54 感到前途没有希望";
q[54]="55 不能(trouble)集中注意力";
q[55]="56 感到身体的某一部分软弱无力";
q[56]="57 感到紧张或容易紧张";
q[57]="58 感到手或脚发重";
q[58]="59 想到死亡的事(death or dying)";
q[59]="60 吃得太多(overeating)";
q[60]="61 当别人看着您或谈论您时感到不自在";
q[61]="62 有一些不属于您自己的想法(not your own)";
q[62]="63 有想打人或伤害他人的冲动";
q[63]="64 醒得太早";
q[64]="65 必须反复洗手、点数(repeat the same actions such as touching,counting,washing)";
q[65]="66 睡得不稳不深(restless or disturbed";
q[66]="67 有想摔坏或破坏东西的想法(urges[冲动])";
q[67]="68 有一些别人没有的想法(ideas or beliefs that others do not share)";
q[68]="69 感到对别人神经过敏(self-conscious[难为情地][也可理解为题2提过的定义])";
q[69]="70在商店或电影院等人多的地方感到不自在";
q[70]="71 感到任何事情都很困难(feeling everything is an effort[费力的事])";
q[71]="72 一阵阵恐惧或惊恐";
q[72]="73 感到公共场合吃东西很不舒服";
q[73]="74 经常与人争论(getting into fequent arguments)";
q[74]="75 单独一人(left alone)时神经很紧张";
q[75]="76 别人对您的成绩(achievements)没有做出恰当的评价(proper credit[赞扬])";
q[76]="77 即使和别人在一起也感到孤单";
q[77]="78 感到坐立不安心神不定(felling so restless you couldn’t sit still)";
q[78]="79 感到自己没有什么价值";
q[79]="80 感到熟悉的东西变成陌生或不像是真的";
q[80]="81 大叫或摔东西";
q[81]="82 害怕会在公共场合晕倒";
q[82]="83 感到别人想占您的便宜(will take advantage of you if you let them)";
q[83]="84 为一些有关性的想法而很苦恼(bother[使烦恼] you a lot)";
q[84]="85 您认为应该因为自己的过错(sins[过错])而受到惩罚";
q[85]="86 感到要很快(pushed[难于/忙碌/促使/像推一样快])把事情做完";
q[86]="87 感到自己的身体有严重问题";
q[87]="88 从未感到和其他人很亲近";
q[88]="89 感到自己有罪(guilt[内疚、有罪])";
q[89]="90 感到自己的脑子有毛病";
int i,j=0,tool=6;
for(i=0;i!=90;i++)//是的,核心代码只有这么一点……
{
cout << q[j] << endl;
cin >> d[j];
tool=d[j];
switch(tool)//这里可简化吗?
{
case 1:
++j;
break;
case 2:
++j;
break;
case 3:
++j;
break;
case 4:
++j;
break;
case 5:
++j;
break;
default:cout<<"在"<<++i<<"题出错!请重新回答!"<<endl<<"累加器归位请忽略本行后数字"<<--i<<--i<<endl;
}
}
cout << "评测结束,正在计算结果" << endl;
i=0;
float t=0,at,pt=0,nt=0,apt,f[10];
j=0;
for(i=0;i!=90;++i)
{
++j;
t=t+d[j-1];
}
at=t/90;
j=0;
for(i=0;i!=90;++i)
{
++j;
if(d[j-1]==1.0)
nt++;
else
pt++;
}
apt=(t-nt)/pt;//下面这个是没办法省的,因为编码几乎是无序的
f[0]=(d[0]+d[3]+d[11]+d[26]+d[39]+d[41]+d[47]+d[48]+d[51]+d[52]+d[55]+d[57])/12;
f[1]=(d[2]+d[8]+d[9]+d[27]+d[37]+d[44]+d[45]+d[50]+d[54]+d[64])/10;
f[2]=(d[5]+d[20]+d[33]+d[35]+d[36]+d[40]+d[60]+d[68]+d[72])/9;//未知原因导致本项结果在测试时出错!
f[3]=(d[4]+d[13]+d[14]+d[19]+d[21]+d[25]+d[28]+d[29]+d[30]+d[31]+d[53]+d[70]+d[78])/13;
f[4]=(d[1]+d[16]+d[22]+d[32]+d[38]+d[56]+d[71]+d[77]+d[79]+d[85])/10;
f[5]=(d[10]+d[23]+d[62]+d[66]+d[73]+d[80])/6;
f[6]=(d[12]+d[24]+d[46]+d[49]+d[69]+d[74]+d[81])/7;
f[7]=(d[7]+d[17]+d[42]+d[67]+d[75]+d[82])/6;
f[8]=(d[6]+d[15]+d[34]+d[61]+d[76]+d[83]+d[84]+d[86]+d[87]+d[89])/10;
f[9]=(d[18]+d[43]+d[58]+d[59]+d[63]+d[65]+d[88])/7;
cout << "结果计算完成!" << endl;//下面的就不像写表格那样重写了,懒
cout << "总分:" << t << endl;
cout << "(这里和阳均项都是四舍五入保留两位的)" << endl <<"总均分:"<<endl;//这里的四舍五入明显繁琐了,而且还多了一些变量
int atfix=at*1000,atmix=at*100;
float atop=atmix;
if(atfix%10>=5)
cout << atop/100+0.01 << endl;
else
cout << atop/100 << endl;
cout << "阳性数:" << pt << endl;
cout << "阴性数:" << nt << endl;
cout << "阳均:";
int aptfix=apt*1000,aptmix=apt*100;
float aptop=aptmix;
if(aptfix%10>=5)
cout << aptop/100+0.01 << endl;
else
cout << aptop/100 << endl;
cout << "——" << endl;//可以加个等级判定,但是用switch太麻烦了
cout << "以下为因子均分,请依次对应各项" << endl;
cout << "躯体化:" << endl;
cout << "强迫症状:" << endl;
cout << "人际关系敏感:" << endl;
cout << "抑郁:" << endl;
cout << "焦虑:" << endl;
cout << "敌对:" << endl;
cout << "恐怖:" << endl;
cout << "偏执:" << endl;
cout << "精神病性:" << endl;
cout << "其他综合:" << endl;
cout<<"分别四舍五入后为——"<<endl;
for(int ljq=0;ljq!=10;ljq++)//累加器
{
int fn=f[ljq]*1000,fnfix=f[ljq]*100;
float fnop=fnfix;//类型转来转去也算对生存周期的把控吧?
if(fn%10>=5)
cout << fnop/100+0.01 << endl;
else
cout << fnop/100 << endl;
}
cout << "——" << endl;
cout << "评分标准(因制作时间原因请自行计算):" << endl;
cout << "按全国常模结果,总分超过160分,或阳性项目数超过43项,或任一因子分超过2分,需考虑筛选阳性,需进一步检查" << endl;
cout << "在均分结果不包括边界时大于3为危险,小于2则从无" << endl;
cout << "等级划分范围:1~1.5 1.5~2.5 2.5~3.5 3.5~4.5 4.5~5(包括5)" << endl;
cout << "需要指出的是本测评为自测,不具有专业性但可以供参考;本程序不是在线程序,不能为您进行常模平均值计算;本表在躁狂症或精神分裂症患者组中的应用受到了一定限制——量表项目全面性不够,缺乏“情绪高涨”、“思维飘忽”等项目,若您的精神病性等项目过高可以尝试其他量表,比如SDS量表(这里就有),或者去专业机构进行专业咨询" << endl;
cout << "测评结束!您可以回看输出结果。如果您发现数据错误可以翻回检查。如果您认为数据是准确的则您现在可以记录下以上数据以进一步分析,输入任意字符内容以结束程序" << endl;
cout << "您的开始时间是:" << save << " 可以自行计算测试用时,如果超过二十分钟则认为结果无效!响铃提示" << endl;
cin >> save;
return 0;
}
int sds()
{
string save;
cout << "\a指导语: 请仔细阅读每一条,把意思弄明白,然后根据您最近一星期的实际感觉,选择最适合您的答案(1没有或很少,2有时,3大部分时间,4绝大部分时间)。" << endl;
cout << "输入任意文字内容(比如当前时间)开始" << endl;
cout << "手机中文输入法输入完整的“shijian”可以弹出时间哦" << endl;
cin >> save;
//初始化
float d[20];
string q[20];
q[0]="1. 我觉得闷闷不乐,情绪低沉";
q[1]="2. 我觉得一天之中早晨最好";
q[2]="3. 我一阵阵哭出来或觉得想哭";
q[3]="4. 我晚上睡眠不好";
q[4]="5. 我吃得跟平常一样多";
q[5]="6. 我与异性密切接触时和以往一样感到愉快";
q[6]="7. 我发觉我的体重在下降";
q[7]="8. 我有便秘的苦恼";
q[8]="9. 我心跳比平时快";
q[9]="10. 我的头脑跟平常一样清楚";
q[10]="11. 我觉得做以前经常做的事情并没有困难";
q[11]="12. 我无缘无故地感到疲乏";
q[12]="13. 我觉得不安而平静不下来";
q[13]="14. 我对将来抱有希望";
q[14]="15. 我比平常容易生气激动";
q[15]="16. 我觉得作出决定是容易的";
q[16]="17. 我觉得自己是个有用的人,有人需要我";
q[17]="18. 我的生活过得很有意思";
q[18]="19. 我认为如果我死了别人会生活得好些";
q[19]="20. 平常感兴趣的事我仍然照样感兴趣";
int i,j=0,tool=6;
for(i=0;i!=20;i++)//是的,核心代码只有这么一点……
{
cout << q[j] << endl;
cin >> d[j];
tool=d[j];
switch(tool)
{
case 1:
++j;
break;
case 2:
++j;
break;
case 3:
++j;
break;
case 4:
++j;
break;
default:cout<<"在"<<++i<<"题出错!请重新回答!"<<endl<<"累加器归位请忽略本行后数字"<<--i<<--i<<endl;
}
}
cout << "评测结束,正在计算结果" << endl;
i=0;
float x=0,y,s;
j=0;
int zhengxing;
for(i=0;i!=20;++i)//这个题目求反机制应该可以宽泛化处理到各个量表
{
++j;//下面的判定应该可以简化?
zhengxing=d[j-1];
if(((((j==2)||(j==5))||((j==6)||(j==11)))||(((j==12)||(j==14))||((j==16)||(j==17))))||((j==18)||(j==20)))
switch(zhengxing)
{
case 1:
x=x+4;
break;
case 2:
x=x+3;
break;
case 3:
x=x+2;
break;
default:
x++;
}
else
x=x+zhengxing;
}
y=x*1.25;
int yfix=y*10,ymix=y;//ymix作用是去尾
float yop=ymix;
if(yfix%10>=5)
y=yop+1;
else
y=yop;
s=x/80;
cout << "结果计算完成!" << endl;
cout << "粗分:" << x << endl;
cout << "标准分:" << y << endl;
cout << "抑郁严重度:" << s << endl;
cout << "——" << endl;
cout << "评分标准(因制作时间原因请自行计算但是对于这个量表就是我懒得去加):" << endl;
cout << "总粗分的正常上限为41分,越低越好。按照中国常模结果 标准分的分界值为53分" << endl;
cout << "标准分:(1)轻度抑郁:53—62(2)中度抑郁:63—72(3)重度抑郁:>72;我国以SDS标准分≥50为有抑郁症状。" << endl;
cout << "对于抑郁严重度,0.5以下者为无抑郁;0.5—0.59为轻微至轻度抑郁;0.6—0.69为中至重度;0.7以上为重度抑郁" << endl;
cout << "根据网上资料,以下有部分精神病患的标准分均分,可供参考:抑郁症65,精神分裂症51,焦虑症53,人格障碍56" << endl;
cout << "本量表在一定程度上能够了解被调查者近期心境,但对具有严重迟缓症状的抑郁则难于评定" << endl;
cout << "测评结束!您可以回看输出结果。如果您发现数据错误可以翻回检查。如果您认为数据是准确的则您现在可以记录下以上数据以进一步分析,输入任意字符内容以结束程序" << endl;
cout << "您的开始时间是:" << save << " 可以自行计算测试用时,如果超过二十分钟则认为结果无效!响铃提示" << endl;
cin >> save;
return 0;
}
int main()//用时:7h+2h+3.5h(包括约2.5hBUG时间)(我真应该开个开发者通道快速输入)
{
int n;
const char* str = "中文";//我也不知道为啥要写这句话
cout <<"欢迎您使用量表测试" << endl;
cout << "对于部分量表中的部分难以理解的语句作了英语原文注释,可选择忽略" << endl;
cout << "输入所需要的量表对应的整形数字以开始" << endl;
cout << "1 SCL—90(九十题,适合全盘检测)" << endl;
cout << "2 SDS(二十题,抑郁自评)" << endl;
cout << "请注意响铃" << endl;//就不弄循环了吧,毕竟做题也是挺累的
cin >> n;//加入高级判定器
switch(n)//注意!本程序所有最后输出的与储存的数据不是相同的,如果以后要做导出数据时要注意
{
case 1:
scl();
break;
case 2:
sds();
break;//break后虽然没有区别,但是按理说可以省一些性能?
default:
cout << "您没有做出有效的选择,即将退出" << endl;
}
cout << "\aHello World!" << endl;
return 0;
}