1、三、函数调用关系图Main()Menu()ReadfromFile()Answer()createLinkedList()Input()InsertNode()WritetoFile()Output()TorF()图1 函数调用关系图四、各函数功能说明1main() 主函数2Menu() 菜单函数3void Answer(int n,TEST * sp) 答题函数4void Output(TEST* ,int i) 输出第n道题题目5int TorF(TEST *sp,char m) 判卷函数6void Input(TEST *) 题目录入函数7void ReadfromFile(TEST*
2、sp) 从文件中读取题目信息8TEST * createLinkedList(TEST*sp) 创建链表9TEST* InsertNode(TEST *head, TEST*s) 插入题目函数10void WritetoFile(TEST* head) 保存到文件五、流程图六、程序运行效果图1初始界面2随机抽题3答题并判卷4插入试题5保存到文件七、总结通过这短短5天的时间,学到了许多东西,尤其是对链表及文件的使用。在这之前对于链表和文件的使用还不是特别明白,现在已经可以较为熟练的应用它们。对结构体数组的使用也更加清晰了。在做单项选择题标准化考试系统时,碰到的第一个问题就是如何从文件里读取数据,
3、为了解决这个问题,我细心的研究了老师给的课件,以及之前写过的学生成绩管理系统V6.0,最终解决了这个问题。碰到的第二个问题是,如何让编译器随机抽取的题目不重复,通过认真思考算法,最终得出了一个较为合理的算法。第三个问题是,链表的使用,在做“插入试题”这一块的函数时,经常出现编译错误的提示,仔细阅读编译器提供的错误信息,并对程序进行修改,最后也成功解决了这一个问题。这份程序在文件的读取和保存以及链表的使用方面参考了老师给的课件,并进行修改。但是,我的程序在图形处理上基本是没有,所以界面不是特别美观。通过网络资源,学会了清屏,system(“cls”);通过这次的课程设计,让我进一步的了解到C语言
4、在我们日常生活中的重要性,体会到编一个对人们现实生活有用处的程序的快乐,更进一步的激发了我学习这门语言的兴趣.经过这次的训练,我相信自己以后会用更多的时间来把这门语言学好,掌握好这门必修的基础语言。最后,在此对我的C语言老师陈老师,表示感谢。感谢她平时认真地帮我调试程序,并耐心地解答疑点。在她的辅导下我从对C语言没有丝毫概念的程度到现在已经可以成功地写出一些比较像样的程序,是她开启了我的编程人生。八、参考文献1 邱建华C语言程序设计教程东软电子出版社,20092 谭浩强C程序设计(第三版)清华大学出版社,20053 邱建华C语言程序设计随堂实训及上机指导东北大学出版社,2007九、程序清单/*
5、单项选择题标准化考试系统设计*/#includestdlib.hmalloc.htime.hstring.h#define M 30typedef struct testchar problem300;char option1100;char option2100;char option3100;char option4100;char key;struct test *next;TEST;Menu(); /菜单函数void Answer(int n,TEST * sp); /答题函数void Output(TEST* ,int i); /输出第n道题题目int TorF(TEST *sp,c
6、har m); /判卷函数void Input(TEST *); /录入题目void ReadfromFile(TEST* sp); /从文件中读取题目信息TEST * createLinkedList(TEST*sp); /创建链表TEST* InsertNode(TEST *head, TEST*s); /插入函数void WritetoFile(TEST* head); /保存到文件int main(void)TEST testM;TEST s;TEST * head;int item,n;while(1)Menu();scanf(%d,&item);ReadfromFile(&test
7、);switch(item)case 1: printf(请输入答题数:);scanf( %dn);Answer(n,&break;case 2:system(clsInput(&s);head=createLinkedList(&head=InsertNode(head,& case 3:system(WritetoFile(head);case 4:exit(0);default:printf(输入有误!请重新输入。n/菜单函数printf(nt*单项选择题标准化考试系统*nt* 1.答题并判卷 *nt* 2.插入试题 *nt* 3.保存到文件 *nt* 4.退出程序 *nt*ntt请输入
8、选项:/答题函数void Answer(int n,TEST* sp)int i,j,score=0,numM;char m;srand(time(NULL);num0=rand()%(M-1)+0;for(i=0;i=0;j-) /保证不出现重复的题目if(numj=numj-1) /若抽中的题重复则重新抽题goto loop;Output(&spnumi,i+1); /输出抽中的题目printf(请输入答案: %cm);score+=TorF(&spnumi,m); /判段用户输入的答案与标准答案是否一致n你的总成绩为:%dn,score); /输出总成绩void Output(TEST
9、*sp,int i) /输出第n道题题目函数(%d) ,i); %sn,sp-problem); A %s noption1); B %s noption2); C %s noption3); D %s noption4);int TorF(TEST *sp,char m) /判卷函数if(sp-key=m) /若用户输入的答案与标准答案一致,返回1Right!return 1;elseWrong! /若用户输入的答案与标准答案不一致,返回0return 0;void Input(TEST *sp) /试题录入函数请输入要插入的试题信息:请输入题干:scanf( %s请输入选项 A:%s请输入
10、选项 B:请输入选项 C:请输入选项 D:sp-key);void ReadfromFile(TEST* sp) /文件读取函数 FILE * fp; int i; if(fp=fopen(test.txt,r) = NULL ) /文件打开失败 printf(Failure to open test.txt! exit(0); for(i=0;!feof(fp); i+) /文件打开成功fscanf(fp, spi.problem); /将读出的数据保存在sp变量里 fscanf(fp, spi.option1);, spi.option2);, spi.option3);, spi.opt
11、ion4);, &spi.key); fclose(fp); /关闭文件TEST * createLinkedList(TEST*sp) /创建链表int i;TEST*head=NULL,*q=NULL,*p=NULL; /定义三个变量M;p= (TEST*)malloc(sizeof(TEST); /申请内存p=&spi;p-next=NULL;if(i=0)head=p; /链表的表头elseq-next=p;q=p;return head;TEST* InsertNode(TEST *head, TEST*s) /插入函数 int n,i;TEST*p,*q; p=head; q=p-
12、next; printf(请输入要在哪个节点后插入题目信息: scanf( for(i=0;q!=NULL & n!=i+1;i+) /遍历 p = p- q = q- if(q = NULL) printf(Not found! Else /插入数据 p-next = s; s-next = q; void WritetoFile(TEST*head) /保存到文件 TEST *q; if(fp = fopen(student.txtw) = NULL ) /文件打开失败 printf(Failure to open file! exit(0); for(q=head;=NULL;q=q-next) /用链表的方式将数据保存到文件 fprintf(fp, q-%sn,q- %cn /关闭文件