C-链表实现,保存文件,评估-单项选择题系统课程设计---ShinePans
课程设计
单项选择题标准化考试系
所属专业:软件project软件三班
完毕人:潘尚
一.设计计划.
1.能够用菜单明白的指导用户操作.
2.操作完毕能够返回主菜单.
3.将输入的题目保存至C盘的文本文件里,以便日后读取.
4.若没有题目,提示用户输入题目,建立文本文档于C盘根文件夹.
5.答题为随机抽取题目进行回答.
6.若输入小写答案选项如abcd,将其转换为大写字母再推断.
7.系统在用户答完题目后能够进行正确率, 答对个数的统计.
二.程序模块设计.
1.模块一:菜单操作模块
该模块实现程序的菜单操作.
算法
(1)在屏幕上呈现美观的菜单..
(2)提示用户输入.
(3)待用户输入选项,swich语句推断,输入错误则又一次输入.
2.模块二:题目装入内存模块
函数开辟内存空间将试题文件里题目装入内存中.
算法:
(1)寻找回车符号,推断题目数量.
(2)开辟内存空间。将题目信息装入内存.
(3)关闭文件返回题目总数.
3.模块三:答题模块
在屏幕上输出题目让用户输入答案。推断用户输入答案是否正确.
算法:
(1)接受用户输入题目数,推断是否小于总共题目或者小于0.
(2)置随机数.
(3)将题目装入内存.
(4)输出题目,等待用户输入答案.
(5)推断输入.
4.模块四:加入试题模块
打开储存试题的文件进行试题信息输入.
算法:
打开文件,开辟内存空间,推断用户输入,写入文件.
四:流程图绘制
1.菜单流程图
2.装入内存
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpbmVwYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
3.答题模块
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc2hpbmVwYW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
{ 
五.问题.
文件读写时文件指针的移位:
当用fgetc()函数遍历文件时文件指针是顺序移动的,当遇到回车符时才会推断出文件在第几行。
而当读取文件信息的时候文件指针的位置应该在行首,这是就要用到fseek()函数将文件指针移位。
并且还要恢复文件指针的位置。用于继续推断当前是文件的第几行。
六.源码.
#include<stdio.h>
#include<stdlib.h>
#defineLEN sizeof(struct test)
structtest
{
char que[81];
char answer1[81];
char answer2[81];
char answer3[81];
char answer4[81];
char ture;
struct test*next;
};
struct test *head;//全局变量储存第一个结构体的指针
int zts(int m)//将第m道题装入内存,输入-1时将返回总题数
FILE *fp;
structtest *p1=NULL;
charch,ch1[5];
inti,n=0,wz,py;
if((fp=fopen("c:\\test.txt","r"))==NULL)//仅仅读方式打开文件
{
printf("文件打开失败请检查C盘下的test.txt文件。\n");
exit(0);
}
do
{
py=1;
ch=fgetc(fp);
for(i=0;ch!='\n'&&ch!=-1;i++)//循环推断回车符个数
{
py++;
ch=fgetc(fp);
}
n++; //储存行数的变量
if(n==m)//假设当前行数与传入參数相等
{
if(p1==NULL)//推断是否是第一次开辟内存空间
{
p1=(struct test *)malloc(LEN);
head=p1;
p1->next=NULL;
}
else
{
p1->next=p1;
p1=(struct test *)malloc(LEN);
p1->next=NULL;
}
wz=ftell(fp);//记录指针当前位置
fseek(fp,(wz-py-1),0);//调整指针位置到行首
fscanf(fp,"%s%s%s%s%s%s",&p1->que,&p1->answer1,&p1->answer2,&p1->answer3,&p1->answer4,&ch1);
fseek(fp,wz+1,0);//调整指针位置到行末
p1->ture=ch1[0];
break;//将数据装入内存后跳出循环
}
}while(!feof(fp));//文件结束跳出循环
fclose(fp);
returnn;//返回题目总数n
}
void exe1()
{
charchange(char word);
voidmain();
voidexe2();
intn,m=0,tm,i,t=0,f=0;
charans[2];
structtest *p1;
system("cls");
printf("请输入要答题数:");
scanf("%d",&n);
tm=zts(-1);
if(0>n||n>tm)
{
printf("答题数应小于总数!");
exe1();
}
for(i=0;i<n;i++)//n为用户要答题数
{
do
{
m=rand();//置随机数
}while(!(0<m&&m<=tm));//推断产生的随机数是否符合要求
zts(m);
p1=head;//将zts开辟的结构体首地址赋给p1
printf("\n第%d题:\n",i+1);
printf("%s\n%s\n%s\n%s\n%s\n请输入答案:",p1->que,p1->answer1,p1->answer2,p1->answer3,p1->answer4);
scanf("%s",&ans);
if(change(ans[0])==p1->ture) /*因为用户可能没有转换大写和小写,故此处加入了大写转换的函数*/
{
printf("恭喜你答对了。\n\n");
t++; /*回答正确的题目数的统计*/
}
else
{
printf("对不起,你答错了。。。\n正确答案是:%c\n\n",p1->ture);
f++;//回答错误统计
}
}
p1=head;
do
{
head=p1->next;
free(p1);
p1=head;
}while(p1!=NULL);//释放结构体占用内存
printf("*******************************\n");
printf("\n已完毕測试!\n共做%d道题:%d错误,%d正确。
\n正确率:%5.2f%%\n\n",n,f,t,(float)t/n*100);
printf("*******************************\n");
printf("\n\n1.继续答题;2.加入题目。3.返回主菜单;\n请选择:");
i=0;
scanf("%d",&i);
if(i==1)
exe1();//继续答题
else
if(i==2)
exe2();//加入题目
else
main();//返回主菜单
}
void exe2() //实现用户自主输入题目
{
char change(char word);
void main();
system("cls");
int n;
FILE *fp;
if((fp=fopen("c:\\test.txt","a"))==NULL)
{
printf("文件打开失败请检查C盘下的test.txt文件。
\n");
exit(0);
}
struct test*p1=NULL;
p1=(struct test*)malloc(LEN);//开辟内存空间
do
{
printf("请输入题目:");
scanf("%s",&p1->que);
}while(p1->que[0]=='\0');
do
{
printf("请输入选项A:");
scanf("%s",&p1->answer1);
}while(p1->answer1=='\0');
do
{
printf("请输入选项B:");
scanf("%s",&p1->answer2);
}while(p1->answer2=='\0');
do
{
printf("请输入选项C:");
scanf("%s",&p1->answer3);
}while(p1->answer3=='\0');
do
{
printf("请输入选项D:");
scanf("%s",&p1->answer4);
}while(p1->answer4=='\0');
printf("请输入答案:");
do
{
scanf("%c",&p1->ture);
p1->ture=change(p1->ture);
}while(p1->ture!='A'&&p1->ture!='B'&&p1->ture!='C'&&p1->ture!='D');
printf("\n确认输入题目?\n1.是。
2.否。\n");
scanf("%d",&n);
if(n==1)
{
fputc('\n',fp);
fputs(p1->que,fp);
fputc(' ',fp);
fputs("A.",fp);
fputs(p1->answer1,fp);
fputc(' ',fp);
fputs("B.",fp);
fputs(p1->answer2,fp);
fputc(' ',fp);
fputs("C.",fp);
fputs(p1->answer3,fp);
fputc(' ',fp);
fputs("D.",fp);
fputs(p1->answer4,fp);
fputc(' ',fp);
fputc(p1->ture,fp);
fclose(fp);
printf("保存成功!");
system("cls");
free(p1);
printf("是否继续加入?\n1.继续加入 2.返回主菜单\n");
scanf("%d",&n);
if(n==1)
exe2();
else
main();
}
else
{
free(p1);
exe2();
}
}
void main()
{
voidchange(char word);
leap:         system("cls");        
//调用dos命令
int n;
puts("┌────────────────────────────────────────┐\n");
puts("│****欢迎使用单项选择题标准化考试系统****|\n");
puts("│─────────────1.開始答题。───────────────│\n");
puts("│─────────────2.加入试题。───────────────│\n");
puts("│─────────────3.帮助说明。───────────────│\n");
puts("│─────────────4.版权信息。───────────────│\n");
puts("│─────────────5.退出系统。
───────────────│\n");
puts("│****************************************│\n");
puts("│ ^-^ │\n");
puts("│ ┌──────────────┐ │\n");
puts("│ │ copyright@潘尚 │ │\n");
puts("│ │ 1.01 │ │\n");
puts("│ │ │ │\n");
scanf("%d",&n);
switch(n)
{
case1:exe1();break;
case2:exe2();break;
case3:
system("cls");
printf("这是一款自我检測的答题系统,试题保存在c盘根文件夹的test.txt文本文件里,可自行加入试题.\n\n可直接打开c盘文件自行加入题目\n\n\n注意格式:题目 选项A. B. C. D. 答案\n\n\n");getchar();
puts("输入不论什么值回到主菜单");getchar();goto leap;
case4:
system("cls");
                            printf("版权全部:潘尚。联系:574273250@qq.com\n\nedition:1.01
 \n\n 来自华中科技大学文华学院软件三班 \n\n");getchar();
puts("输入不论什么值回到主菜单");getchar();goto leap;
case5:printf("\n欢迎再次使用,再见^-^\n");getchar();
}while(n!=7);
}
char change(char word) /*转换为大写字母*/
{
if((word>='a')&&(word<='z'))
word-=32;
return(word);
}
七.測试.
 
  | 
 
  | 
 
  | 
 
  | 
 
  | 
C-链表实现,保存文件,评估-单项选择题系统课程设计---ShinePans的更多相关文章
- 第2-1-1章 FastDFS分布式文件服务背景及系统架构介绍
		
目录 1 背景 1.1 为什么需要分布式文件服务 1.1.1 单机时代 1.1.2 独立文件服务器 1.1.3 分布式文件系统 1.2 什么是FastDFS 2 系统架构 2.1 Tracker集群 ...
 - 12.JAVA之GUI编程打开与保存文件
		
功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Me ...
 - vim保存文件时,生成.un~文件
		
在用vim保存文件时,文件夹下生成.un~文件 怎么删除这些文件呢 在网上搜索的答案: http://stackoverflow.com/questions/15660669/what-is-a-un ...
 - android 保存文件的各种目录列表
		
一般的,我们可以通过context和Environment来获取要保存文件的目录 ($rootDir) +- /data -> Environment.getDataDirectory() | ...
 - 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
		
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
 - C#项目打开/保存文件夹/指定类型文件,获取路径
		
C#项目打开/保存文件夹/指定类型文件,获取路径 转:http://q1q2q363.xiaoxiang.blog.163.com/blog/static/1106963682011722424325 ...
 - FileOutputStream保存文件
		
//保存文件,根据传入的路径,存放在SD卡目录下public boolean saveToPath(String title, String pageName) { Bitmap b = getCha ...
 - Qt snippet — 打开文件&保存文件
		
打开文件: void Notepad::on_actionOpen_triggered() { QString fileName = QFileDialog::getOpenFileName(this ...
 - php中关于js保存文件至本地的问题
		
最近在搞一个livezilla的在线客服聊天的东东,客户界面要求添加一个下载聊天记录的功能.于是我就是翻看了下网上的各种关于”js保存文件至本地“的资料,发现只能在IE下通过execCommand实现 ...
 
随机推荐
- Redis源码解析:24sentinel(五)TLIT模式、执行脚本
			
十一:TILT模式 根据之前的介绍可知,哨兵的运行,非常依赖于系统时间,但是当系统时间被调整,或者哨兵中的流程因为某种原因(比如负载较高.IO发生阻塞.进程被信号停止等)而被阻塞时,哨兵的行为就会变得 ...
 - Django项目:CRM(客户关系管理系统)--24--16PerfectCRM实现King_admin日期过滤
			
登陆密码设置参考 http://www.cnblogs.com/ujq3/p/8553784.html list_filter = ('date','source','consultant','con ...
 - TZ_08_maven私服项目的上传和下载
			
1. 需求 正式开发,不同的项目组开发不同的工程. ssm_dao工程开发完毕,发布到私服. 2下载 nexus Nexus 是 Maven 仓库管理器,通过 nexus 可以搭建 maven 仓 ...
 - 再问你Java内存模型的时候别再给我讲堆栈方法区
			
在介绍Java内存模型之前,先来看一下到底什么是计算机内存模型,然后再来看Java内存模型在计算机内存模型的基础上做了哪些事情.要说计算机的内存模型,就要说一下一段古老的历史,看一下为什么要有内存模型 ...
 - python OneHot编码
 - NOIP模拟题17.9.26
			
B 君的任务(task)[题目描述]与君初相识,犹如故人归.B 君看到了Z 君的第一题,觉得很难.于是自己出了一个简单题.你需要完成n 个任务,第i 任务有2 个属性ai; bi.其中ai 是完成这个 ...
 - Calendar to julian date format
			
1.JULIAN DATE 定义 2.示例: 定义枚举: public enum JulianDateType { /// <summary> /// J ...
 - 统计Linux下的CPU状态信息
			
def cpu(): all_cpus=[] with open('e:/cpu.txt') as f: core={} for line in f.readlines(): ab=line.spli ...
 - NFS客户端挂载目录后无写入权限的解决方案
			
转载至:https://blog.csdn.net/younger_china/article/details/52089337 在客户机通过 mount -o rw -t nfs 192.168.1 ...
 - DirectX11笔记(四)--渲染管线
			
原文:DirectX11笔记(四)--渲染管线 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u010333737/article/details/ ...