背单词小程序和选课系统课设报告Word文档格式.docx
《背单词小程序和选课系统课设报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《背单词小程序和选课系统课设报告Word文档格式.docx(66页珍藏版)》请在冰豆网上搜索。
关键代码:
if(i==1)//进入功能1添加新词
{
system("
cls"
);
//清屏
Add_word();
、、调用添词函数
cin>
>
j;
if(j==1)
{Add();
}
elseif(j==2)
{
system("
Frame();
}
else//尽量避免在使用程序时因操作引起的失误
cout<
<
"
认真一点!
(╰_╯)#"
endl;
回答问题决定您的方向:
您是否对我的程序满意:
Y/N"
charch;
cin>
ch;
if(ch=='
Y'
||ch=='
y'
)
{system("
Frame();
else
{exit(0);
}
elseif(i==2)
Test();
Test_ByOrder();
任意键返回主目录!
//实现可以返回主目录
b'
B'
{system("
elseif(j==2)
Test_ByImmediately();
elseif(j==3)
添加单词
用户在主界面选择功能1后即执行添加单词模块。
它将提示用户输入添加单词,之前可以显示已存在的单词,利用while循环实现不定量输入单词,最后保存到单词库。
主要使用技术:
文件指针(FILE*fp)while判断循环
charch='
Q'
;
//用来判断是否继续输入单词
if((fp=fopen("
dictionary.txt"
"
ab+"
))==NULL)
cout<
文件无法打开!
exit(0);
for(i=0;
fread(&
Word[i],sizeof(WoRD),1,fp)!
=0;
i++)
{cout<
Word[i].num<
"
Word[i].E_word<
}//特别有成就感的地方!
把以前的单词输出来展示
j=i;
while(ch=='
q'
)//while循环支持不断向文件载入内容!
目前单词库单词存储量为:
j<
请分别输入新增单词的编号、单词、中文翻译和背诵记录(tt/ff):
j++;
Word[j].num>
Word[j].E_word>
Word[j].C_word>
Word[j].TF;
fwrite(&
Word[j],sizeof(WoRD),1,fp);
添加成功!
是否继续增添单词,继续则输入Q/q"
检测功能
用户在主界面选择功能2后即执行该模块。
在此模块中可以实现顺序检测和随机检测。
用户输入正确或错误都会给与提示!
并且可以输入想要检测的单词数量,量力而行。
文件的读出与写入,取随机数,if语句
if((fp=fopen("
i<
t;
i++)
fread(&
Word[i],sizeof(WoRD),1,fp);
cout<
随即检测开始!
:
请输入这次测试的单词量:
intp;
cin>
p;
if(p>
=t)
for(i=0;
charword[10];
intj;
j=rand()%t;
//产生随机数
Word[j].C_word<
___"
word;
if(strcmp(word,Word[j].E_word)==0)
{
cout<
回答正确!
chartf[3]="
tt"
strcpy(Word[i].TF,tf);
//将信息记录在案!
}
else
回答错误!
ff"
else
j=rand()%p;
已背过单词
用户在主界面选择功能3后即执行该模块,能够显示已背诵的单词。
该模块只是调用和显示,主要用到了if函数和字符串处理和文件的读出技术。
……
if((fp=fopen("
))==NULL)//打开文件并判断文件是否存在
//将文件信息读出
已背过的单词:
charch[5]="
charcf[5]="
TT"
if(strcmp(Word[i].TF,ch)==0||strcmp(Word[i].TF,cf)==0)//和英汉互译差不多的操作判断后输出
{
cout<
Word[i].C_word<
}
……
未背单词
用户在主界面选择功能3后即执行该模块,能够显示尚未背诵的单词。
{
cout<
exit(0);
}
未背过的单词:
charch[5]="
charcf[5]="
FF"
if(strcmp(Word[i].TF,ch)==0||strcmp(Word[i].TF,cf)==0)
}}
英汉互译
用户在主界面选择功能5后即执行该模块,能够进行英汉互译功能。
charE[20];
//用数组是为了下面的地址
WoRDWord[100];
输入其英文:
E;
if(strcmp(Word[i].E_word,E)==0)
头文件
本套程序一共有一个头文件。
HEAD.h用于定义单词结构体,共有“单词编号”,“单词英文”,“单词中文意思”,“标注”几项。
代码如下:
structWoRD//没有用WORD时因为#include<
windows.h>
里有叫WORD的⊙﹏⊙b汗!
{
intnum;
//单词编号
charE_word[20];
//单词英文
charC_word[30];
//单词中文意思
charTF[3];
//用来标注是否背过
};
3.调试及问题解决
本套程序的调试中遇到过许多问题。
尤以以下几个最具代表性和启发性:
1.程序无法循环使用。
刚开始程序完成一项功能后就自动退出程序,总是不能再返回主菜单,这样程序也就显得特无力。
后来通过他人指导利用函数间相互调用完成了界面间自由往来!
而且利用清屏功能让程序显得干净明了!
voidFrame()
inti,j;
Menu();
i;
if(i==1)
Add_word();
2.文件的调入后的数据更新。
每次进行单词添加的时候都只能显示10个单词,但是我渴望的是把以前的单词输出来,再把这次添加的单词也输出来。
。
后来我利用一个数组把文件里的单词信息记录了一下,再把那个全局变量记录一共多少单词数,这样就使得程序对单词信息很清晰,单词更新也不再是问题!
voidFirst()//这个函数实现了文件信息的更新每次开始它都可以将以前的文件内容跟现在串起来!
是我花费最长时间的地方!
T_T
FILE*fp;
{}
t=i;
//将上次单词数赋给现在需要使用的t记录下来!
3.显示背诵过和为背诵过的单词不能实现
试过用bool,但是失败了!
⊙﹏⊙b汗后来我从int换到char又换到字符串!
利用字符串处理函数strcmp(str1,str2)==0实现了。
有时候就是一个很简单的问题,但是就是弄不好!
挺可恶!
if(strcmp(Word[i].TF,ch)==0||strcmp(Word[i].TF,cf)==0)//条件符合就输出
cout<
4.关于重名
在用#include包含一些系统自带的头文件时会遇到自己的构造体或变量明和系统冲突,虽然这个知识点在课本一开始就知道了,但是真正在实战中还挺难发现。
必有WORD就在“windows.h”中存在。
5.一些遗憾
对于文件流相关知识的不熟悉让我感觉很受挫!
不过没关系,我可以利用下一个程序去熟悉去掌握!
这个小程序中仍旧存在的种种问题让我也压力挺大的,但是迫于时间和考试只好将修改作罢了~~不过因此我也理解了那些已经在一线奋斗的前辈的苦恼,软件真的没有那么简单!
!
教师开设选修课程,每门选修课程有课程编号,课程名称,课程性质,总学时,授课学时,实验或上机学时,学分,开课学期等信息,学生可自由选课。
试设计一选修课程系统,使之能提供以下学生选课功能:
●课程信息录入功能(课程信息用文件保存)
●课程信息浏览功能
●学生选修课程,按教师选择或按课程选择或按学分选择
●查询功能
●修改功能,修改该学生自己选修的课程
本套程序使用面向对象方法进行设计。
包括三个头文件,一个成员(友元)函数定义模块,一个主程序模块和几个功能模块(somehead.h,land.h,run.h,somehead.cpp,run.cpp,land.cpp,maincpp,)。
头文件“somehead.h,land.h,run.h”
类的定义
定义一个cstudent类,cperson类和clesson类,其中cstudent是cperson类的派生类。
classCSTUDENT:
publicCPERSON
public:
voidchoose_lesson();
voidshow_lesson();
voidcorrect_lesson();
private:
charlesson[40];
}
classCLESSON
voidtype_in();
voidlook_up();
Lessonlesson[20];
Land.cpp
用于对类中的成员函数及友元函数进行定义。
实现了选课系统的登录功能。
请分别填写您的账户和密码:
student[0].account_number>
student[0].password;
请输入您的账号:
account_number;
if(strcmp(student[0].account_number,account_number)==0)
请输入您的密码:
password;
if(strcmp(student[0].password,password)==0)
登陆成功!
任意键返回选课界面!
somehead.cpp
将SOMEHEAD,H的函数实现,其中几乎涵盖了本程序的所有动作功能。
iffreadfwrite以及字符串处理
for(i=0;
lesson,sizeof(Lesson),1,fp)!
i++)//读一次输出一次!
当初的问题所在!
fread与fwrite要配合使用且二进制!
{
lesson.num<
\t"
//当年一直输出“烫”是因为数组输出一些不认识的“i”
<
lesson.name<
lesson.character<
<
lesson.all_classhour<
lesson.teach_classhour<
lesson.out_classhour<
lesson.credit<
lesson.time<
lesson.teacher<
}
请输入您要改选的课程的序号:
strcpy(student.lesson,lesson[j-1].name);
改课成功!
Run.cpp
构建了程序的主题运行框架,保证程序的循环性及更大的操作性。
没有用switch但是我感觉它的操作性似乎也不错!
函数之间的相互调用清屏if选择
in>
lessoN.type_in();
charch;
cin>
if(ch=='
run();
else
Quit();
//把Quit()友元!
Main.cpp
启动程序
设置屏幕及字体颜色和标题的内容
主要代码:
voidmain()
system("
color3E"
//屏幕及字体颜色
SetConsoleTitle("
选课也疯狂!
↖(^ω^)↗------老邓制作!
//屏幕标题
Clandland;
land.landing();
在程序的编写过程中遇到过许多问题,再次列举几个有代表性的:
1.过程与对象混淆。
刚做完面向过程的程序,在做面向对象的程序时,并没有细致的去想,直接上手就做,浪费了大量的时间,到头来又重新再做一次。
后来对类什么的还是不熟悉,导致程序的各种不顺利,仅此为戒,好好学习,踏实努力!
2.文件的输入再次出现无法改变的烫和内存的读写错误。
无法控制循环输出时变量的值,不是多输出就是少输出,乱七八糟,盲目借鉴他人经验,更是一点没进展。
后来安心下来去整理代码,才发现fread和fwrite要配合使用二进制,汗~:
3.#include”**”重复调用头文件
在程序中定义一个对象系统说多了,不定义又说少了。
以后我会记得检查一下是不是程序头文件的包含是否有内容重复。
三.心得体会
转眼之间课设就要过去,现在回首这一段的生活,真的让我成长不少!
以前学习多是纸上谈兵,实际操作真的很少。
当老师把任务布置下来时,顿时我就乱了分寸~~呵呵~~不过还好上册学的还行,短期调整之后就开始了我的工程。
一次次的报错,然后在一次次耐心去寻找错误,最后在一次次声音的变化中体会到了成功的快感!
其实程序员挺快乐的!
有时候认为程序员的生活忙碌单调有枯燥,无止尽的苦和累!
~真是不幸,忽然就又犯了小马过河的错误,咳!
~~真的只有试过之后才明白!
程序员双手敲击出来的不是一行行代码,而是一块块程序员心中世界的砖瓦!
具体说一说一些心得体会:
1.一定要有安排,在将计划设计好之后再动手!
策划成本越高,实际成本就越低!
2.遇到问题要迅速冷静分析!
养成良好的编程习惯会让人受益匪浅!
3.在困难一直没有解决的时候要果断向互联网及身边友人求助,一个好汉三个帮嘛!
IT界单打独斗是行不通的!
大家都要互相帮助才是!
4.要多多尝试新鲜技术,让自己的思想时刻处于兴奋状态是一种很美好的感觉!
5.程序始终是