版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息科学与技术学院程序设计基础课程设计报告题目名称:学生信息管理系统学生姓名:学号:专业班级:计科级二班指导教师:目录1课程设计题目与要求 21.1设计题目 21.2设计要求 22总体设计 33详细设计 43.1主模块设计 43.2功能设计 54主菜单界面 85课程设计总结 126参考文献 12
1课程设计题目与要求1.1设计题目行编辑器1.2设计要求1.问题描述(功能要求):设置一个简单的行编辑器,每行以回车结束。数据以文件的形式储存。编辑器具有查找、替换、修改的功能。问题的解决方案:根据系统的功能要求,可以将问题解决分一下步骤:分析系统中的各个实体之间的关系及其属性和行为;根据问题描述,实现系统的类层次;完成类层次中的各个类的描述(包括属性和方法);完成类中的各个成员函数的定义;完成系统中的应用模块;功能调试;完成系统总结报告以及系统使用说明书;其他要求:只能使用c/c++语言,源程序要有合适的注释,使用程序容易阅读。至少采用文本菜单界面(如果能使用图形菜单更好)。学生可以增加新的功能。
2总体设计主菜单创建文档统计文档删除文档主菜单创建文档统计文档删除文档3详细设计3.1主模块设计行编辑器:主要是利用vector(动态数组)、指针,来实现对文档的储存、统计、删除等功能。总体结构流程图开始开始3编辑主菜单系统主单编辑主菜单系统主单 12用户创建文档从系统中打开用户创建文档从系统中打开EscEsc输入或打开后的文章输入或打开后的文章12345退出保存文档删除字符串统计某一字符串统计文本退出保存文档删除字符串统计某一字符串统计文本全部按3结束返回主界面结束结束3.2功能设计字符串的编辑字符串的编辑,是利用动态数组vector进行对字符的储存,vector不仅是一个动态数组,还带有指针。一开始可以不定义他的大小,根据用户的需要输入。代码如下:cout<<endl;屏幕显示输入文本…屏幕显示输入文本… for(inti=0;i<txt.size();++i) { if(txt[i]==13) cout<<endl;键盘输入 elseIfc=13换行判断Ifc=13换行判断ASSII } charc; while(c=getch(),c!=27)ifc=27ifc!=27&&c!=13 {存入数据 if(c==13)存入数据 cout<<endl; else cout<<c;本函数结束 txt.push_back(c);本函数结束
统计文本是根据输入的文档的ASSII来判断分类的,其中能对英文(分大小写)、数字、空格、单词。进行统计。代码如下:voidcount_all(){ cntLower=0; cntUpper=0; cntNumber=0; cntSpace=0; cntWords=0; for(inti=0;i<txt.size();++i) { if(txt[i]=='')cntSpace++; if(txt[i]>='0'&&txt[i]<='9')cntNumber++; if(txt[i]>='a'&&txt[i]<='z')cntLower++; if(txt[i]>='A'&&txt[i]<='Z')cntUpper++; if(!(txt[i]>='a'&&txt[i]<='z'||txt[i]>='A'&&txt[i]<='Z') &&(txt[i-1]>='a'&&txt[i-1]<='z'||txt[i-1]>='A'&&txt[i-1]<='Z')) cntWords++; }开始If1?开始If1?If2?NIf2?YNIf3?NIf3?contSpace++If4?YcontSpace++If4?NcontNumber++YcontNumber++YcontLower++contUpper++contWords++结束contLower++contUpper++contWords++结束统计某一个字符串统计是利用指针来找到统计的字符,再利用计数器进行计数。开始开始intcount_string(constchar*t){intres=0;res=0 for(inti=0;i<txt.size();++i)res=0 { inttmp=i;txt[txt[tmp]=t[j]?t[j]!=0? while(t[j]!='\0'&&txt[tmp]==t[j]) { tmp++;N j++; }Y if(t[j]=='\0')res++;tmp++;j++; }tmp++;j++; returnres;}Ift[j]=’\0’Ift[j]=’\0’Yres++Nres++返还res结束返还res结束删除某个字符串删除字符串雷同查找字符串,查找字符串,先将其字符串找到,再利用计数器计数,而删除字符串是先找到再删除,在此不做赘述。
4主菜单界面打开程序的界面主菜单新建文档子菜单(程序的主要功能)
统计文本统计某个字符串删除某个字符串文档保存按任意键后到主菜单打开文档
打开文档(注:修改后的文章)5课程设计总结经过几天的忙碌,最终把课程设计任务完成了。要做好一件事,只能一步一步的去做,不可能一下子就完成。本来以为简单的几个功能,要实现以为很容易,至多一天就可以做完,可是在真正实现、编写代码的过程却发现有太多的问题没有解决。比如用什么方式来进行字符串的保存,用什么算法来实现删除后所有后面的字符向前移动,都是值得注意的。要做好一个系统,一个严谨的思维是不可以或缺的,每一个联系都要考虑,每个细节都需要注意,每一种错误都要会解决。只有把每一种问题都解决了,才能做出一个不是很完善的系统出来。让我懂得了不一定你懂了,你就编出能运行的程序,都是要一步一步脚踏实地去慢慢实践,慢慢修改调试出来的。6参考文献1.《C++程序设计》作者:谭浩强清华大学出版社2.《VisualC++程序设计技巧与实例》作者:许福舒志张威等出版社:中国铁道出版社3.《VisualC++全能速查宝典》作者:刘锐宁,梁水,宋坤人民邮电出版社4.《C++语言程序设计题典》作者:李春葆,曾平,刘斌清华大学出版社专业方向课程设计班级:J计算机姓名:学号:指导老师:完成日期:第一部分需求分析一、调查用户需求本系统的最终用户为在校学生:1、学校的组织机构情况与教室管理相关的学校的组织机构有:学生、教师和教室。学校的所有日常工作都是围绕着这三大部分进行的。一个学校下设若干学院,如计算机学院、电汽学院、法学院、财经学院等;一个学院下设若干专业,如计算机学院下设四个专业:计算机科学与技术、软件、通信和信息安全;一个专业有若干班级;一个班级有若干同学。一个专业有若干教师。一个专业开设有若干课程。一个学校有若干教学楼,如计算机大楼、一号楼、二号楼等;一个教学楼有若干楼层,如一号楼有一层~十二层;一个楼层有若干教室,如一层有1101,1102,1103,1104等教室。一个教师可以开设若干门课程,一门课程可以由多个老师来教授。一个教室在不同的时段可以上不同的课程。2、调查相关部门的业务活动情况教务处:教务处需要处理借教室申请信息,使用的数据是纸质版的教室、教师和学生信息,对提出的借用教室申请采用手动的加工和处理,最后给借教室的人输出的是批准或拒绝借用教室的信息,即一个纸质的教室使用条。3、用户对系统的要求信息要求:由于系统的使用主体是教师和学生,因此对系统的信息要求可分为以下几个方面:教师信息教师的基本信息,主要包括教师的教师编号,教师姓名,性别,所属院系,职称,身份证号等;b、学生信息学生的基本信息,主要包括学生的学号,姓名,院系号,身份证号等;教室信息教室的基本信息,主要包括教室的教室编号,教学楼号,楼层号等;教学楼信息教学楼的基本信息,主要包括教学楼名称,教学楼编号等;处理要求:教师查询;学生通过这个功能,可以查询相关院系相关教师的个人信息以及开课信息,以便能更好地了解教师及其开课情况。教室查询;学生通过这个功能,可以查询相关教学楼相关教室的信息以及该教室在每天任一时段的使用情况,或者有课,或者有讲座、或者有活动等等。这个功能以便使同学能更好地了解教室及其使用情况。课程查询;学生通过这个功能,可以查询某一课程的详细信息,如同一课程可以有多个教师开课,以便更好地了解任一课程的详细信息。教室借用;学生通过这个功能,可以借教室,即获得教室在某段时间的使用权,办讲座,开展社团活动等等。我要自习;学生通过这个功能,可以查询当天某一时段或多个时段的空闲教室,去上自习。安全性与完整性要求:安全性要求:系统应设置访问用户的标识以鉴别是否是合法用户,并要求合法用户设置其密码,保证用户身份不被盗用;b、系统应对不同的数据设置不同的访问级别,限制访问用户可查询和处理数据的类别和内容;c、系统应对不同用户设置不同的权限,区分不同的用户,如学生、教师和教务处管理人员。学生(只能查询教室、教师和课程信息以及提出借用教室申请),教师(只能查询教室、教师和课程信息,以及提出借用教室申请),教务处管理人员(可进行日常事务的处理,如增加、删除、更新课程、教室、教师信息,并批准或拒绝借用教室的申请)。完整性要求:a、各种信息记录的完整性,信息记录内容不能为空;b、各种数据间相互的联系的正确性;c、相同的数据在不同记录中的一致性。4、确定系统的边界经对前面的需求调查和初步的分析,确定由计算机完成的工作时对数据进行各种管理和处理,具体的工作内容见第二部分,由手工完成的工作主要有对原始数据的录入;不能由计算机生成的,各种数据的更新,包括数据变化后的修改,数据的增加,失效数据或无用数据的删除等;以及系统的日常维护。二、系统功能的设计和划分根据如上得到的用户需求,我们将本系统按照所完成的功能分成以下几个子系统:教室查询子系统教师查询子系统课程查询子系统教室借用子系统我要自习子系统各子系统完成的功能如下:1.教室查询子系统1.关键词搜索在输入框中直接输入想要查询的教室的编号,即可得到教室在任一时段的使用信息。2.目录搜索根据教学楼教室,帮助同学寻找想要搜索的教室。进入教室页面后,即可得所查教室在任一时段的使用信息。2、教师查询子系统1.关键词搜索在输入框中直接输入想要查询的老师的名字,即可得到教师的个人信息及开课信息。2.目录搜索根据院系教师,帮助同学寻找想要搜索的老师。进入教师页面后,即可得教师的个人信息及开课信息。3、课程查询子系统1.关键词搜索在输入框中直接输入想要查询的课程的名字,即可得到课程的详细信息。2.目录搜索根据院系课程,帮助同学寻找想要搜索的课程。进入课程页面后,即可得课程的详细信息。4、教室借用子系统点击教室借用后,进入一个用户登录界面,学生或者教师需要登录,才能给予空闲教室,发出借用教室的申请,等待管理员批准。5、我要自习子系统根据教学楼楼层,输入时段,寻找此时的空闲的教室,帮助同学寻找上自习的教室。进入教室页面后,即可得该教学楼某一时段在任意时段的空闲信息。第二部分数据流图1、教师查询子系统学生学生查询教师开课信息该院系所有教师信息教师姓名查询课程号该课程具体信息查询查询教师姓名院系名称2、教室查询子系统所有教室信息所有教室信息学生教室使用情况查询教师使用情况查询教学楼号码教室号查询3、课程查询子系统院系名称院系名称该院系全部课程信息学生查询查询课程名称所有开设该课程的教师信息课程名称4、教室借用子系统学生学生查询教室使用情况借用否否教室号时间用户登录请求处理停止个人信息是5、后台管理子系统老师老师登陆用户名密码成功否否是用户管理页面6、我要自习子系统学生学生教学楼名称楼层时间段查询空闲教室第三部分数据字典1.教学楼数据字典: 属性名存储代码类型长度备注教学楼号bnoString20学校教学楼号教学楼名称bnameString20学校教学楼名称2.教室数据字典:属性名存储代码类型长度备注教室编号clnoInt10教学楼中教室号教学楼号bnoString6教室所在教学楼号楼层floorString10教室所在楼层3.院系数据字典:属性名存储代码类型长度备注院系号deptnoString20学校中院系的编号院系名称deptnameString20学校中院系名称4.课程数据字典:属性名存储代码类型长度备注课程号cnoString20课程编号课程名称cnameString20课程名称学分creditString1课程学分课程类型categoryString10课程类型(全校选修、专业选修、专业必修、人文修养、艺术教育)开课院系号deptnoString20课程开课的院系5.教师数据字典:属性名存储代码类型长度备注教师编号tnoString20教师编号教师姓名tnameString10教师姓名性别sexString2教师性别(男、女)所属院系deptnoString20教师所属院系职称titleString10教师的职称(教授、副教授、讲师)身份证号tidString18教师身份证号6.学生数据字典:属性名存储代码类型长度备注学号snoString10学生编号姓名snameString10学生姓名院系号deptnoString20学生所属院系身份证号sidString18学生的身份证号7.教师开课表数据字典:属性名存储代码类型长度备注教师号tnoString20教师编号教室号clnoString10教室编号课程号cnoString20该教室所开的课程工作日weekdayString8工作日上课时间段periodString20上课时间段8.教室借用表数据字典:属性名存储代码类型长度备注教室号clnoString10教室编号使用人编号snoString10借用教室人员的编号使用日期usedateString10使用教室的日期工作日WeekdayString8使用教室的星期借用时间段PeriodString20使用教室的时间段用途UseString100借用教室的用途状态UsestatusString1借用教室审批的状态第四部分概念结构设计学生管理信息系统分E-R图教师课程教师课程讲授mn院系教师院|教1n学生院|学n1nm讲授教师借用nm教室学生nm讲授教师借用nm教室学生学生管理信息系统总E-R图院系院系教师学生课程院|教院|学讲授教学楼号教学楼教—教教学楼名教室教室号教学楼号楼层院系号院系名称学号姓名院系号身份证号教师号教师姓名性别院系号职称身份证号号课程号课程名称学分课程类型院系号借用日期时间段用途工作日时间段1nmn1nmn1n第五部分逻辑设计以下是教室管理信息系统的关系模型:1.教学楼(教学楼号,教学楼名称)2.教室(教室编号,教学楼号,楼层)3.院系(院系号,院系名称)4.课程(课程号,课程名称,学分,课程类型,开课院系号)5.教师(教师编号,教师姓名,性别,所属院系,职称,身份证号)6.学生(学号,姓名,院系号,身份证号)7.教师开课表(教室号,上课时间,上课时间段,教师号,课程号,)8.教室借用表(教室编号,使用人编号,使用日期,借用时间段,工作日,用途)性能优化:使用触发器当往教师开课表中插入一条数据时同时往教室借用表中插入一条数据,在查询时可以大幅度提高查询速度。如果不在乎空间则可以用空间换效率。通过建立QUERY视图,把教师查询、教室查询、课程查询三种查询方法统一起来。第六部分程序部分代码及截图关系图:用户登陆界面privatevoidbutton2_Click(objectsender,EventArgse){Close();}privatevoidbutton1_Click(objectsender,EventArgse){stringstrName=textBox1.Text;stringstrPwd=textBox2.Text;stringstrRole=comboBox1.Text;stringstrSql=null;if(strRole=="学生"){strSql="SELECT*From登陆WHEREflag=2ANDUsename='"+strName+"'ANDpassword='"+strPwd+"'";}elseif(strRole=="教师"){strSql="SELECT*From登陆WHEREflag=1ANDUsename='"+strName+"'ANDpassword='"+strPwd+"'";}elseif(strRole=="管理员"){strSql="SELECT*From登陆WHEREflag=0ANDUsename='"+strName+"'ANDpassword='"+strPwd+"'";}else{MessageBox.Show("请选择用户类型");return;}stringsource=Source.getSource();SqlConnectionconn=newSqlConnection(source);conn.Open();SqlCommandcmd=newSqlCommand(strSql,conn);SqlDataReaderreader=cmd.ExecuteReader();if(reader.Read()){if(comboBox1.Text=="学生"){Form1studentform=newForm1();//studentform.setStateName(strName);studentform.Show();this.Visible=false;}if(comboBox1.Text=="教师"){Form1teacherform=newForm1();//adminform.setStateName(strName);teacherform.Show();;this.Visible=false;}if(comboBox1.Text=="管理员"){Form3adminform=newForm3();//adminform.setStateName(strName);adminform.Show();;this.Visible=false;}}else{MessageBox.Show("用户名或密码错误!");}}}}教师登陆的用户名和密码均为teacher,管理员登陆的用户名和密码均为admin。学生及教师登陆成功界面教师信息查询privatevoidbutton1_Click(objectsender,EventArgse){try{if(boBox1.Text.Trim()==""){boBox1.Focus();}else{if(boBox2.Text.Trim()==""){boBox2.Focus();}else{MySql="Selecttname,sex,title,tidfrom教师,院系wheretname='"+boBox2.Text+"'and教师.deptno=院系.deptnoand院系.deptname='"+boBox1.Text+"'";//调试生成的查询语句是否正确的语句//MessageBox.Show(MySql);connection=MyFunction.GetSqlConnection();//获得数据适配器对象MySqlDataAdapter=MyFunction.GetSqlDataAdapter(MySql);//给数据适配器对象添加表映射MySqlDataAdapter.TableMappings.Add("Table",MyTable);//设置数据适配器对象的查询语句MySqlDataAdapter.SelectCommand=newSqlCommand(MySql,connection);//绑定数据适配器对象MySqlCommandBulider=newSqlCommandBuilder(MySqlDataAdapter);//填充数据集DataSetMyDataSet=newDataSet();MySqlDataAdapter.Fill(MyDataSet);//赋予数据绑定对象的数据源属性this.fk教师院系bindingSource.DataSource=MyDataSet;//赋予数据绑定对象数据成员属性this.fk教师院系bindingSource.DataMember=MyTable;//赋予数据网格对象的数据源属性this.dataGridView1.DataSource=this.fk教师院系bindingSource;}}}catch(SqlExceptionex){MessageBox.Show(ex.Message,"提示信息!",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning);}}教师课表查询代码与教师信息查询仅有一处不同:MySql="selecttname,cnamefrom教师,院系,讲授,课程where院系.deptname='"+boBox1.Text+"'andtname='"+boBox2.Text+"'and教师.deptno=院系.deptnoand讲授.tno=教师.tnoand讲授.cno=课程.cno;";教室查询//教师使用情况privatevoidbutton3_Click(objectsender,EventArgse){try{if(boBox3.Text.Trim()==""){boBox3.Focus();}else{if(boBox4.Text.Trim()==""){boBox4.Focus();}else{//教师使用情况MySql="Select课程.cname,讲授.weekday,讲授.Period,教师.tnameFrom教师,讲授,课程,教学楼Where讲授.clno='"+boBox4.Text+"'and教学楼.bname='"+boBox3.Text+"'and讲授.bno=教学楼.bnoand讲授.tno=教师.tnoand课程.cno=讲授.cno;";其他代码与之前一样}学生使用情况查询与教师使用情况查询仅有一处代码不同:MySql="Select借用.Weekday,借用.PeriodFrom借用,教学楼Where借用.clno='"+boBox4.Text+"'and教学楼.bname='"+boBox3.Text+"'and借用.bno=教学楼.bno;";课程查询privatevoidbutton5_Click(objectsender,EventArgse){//this.dataGridView5.DataSource=null;try{if(boBox5.Text.Trim()==""){boBox1.Focus();}else{MySql="selecttnamefrom教师,讲授,课程where教师.tno=讲授.tnoand讲授.cno=课程.cnoand课程.cname='"+boBox5.Text+"';";其他代码与之前一样}教室借用privatevoidbutton6_Click(objectsender,EventArgse){try{if(boBox6.Text.Trim()==""){boBox6.Focus();}else{if(boBox7.Text.Trim()==""){boBox7.Focus();}else{if(boBox9.Text.Trim()==""){boBox9.Focus();}else{MySql="insertinto借用(bno,clno,sno,Weekday,Period)values('"+boBox6.Text+"','"+boBox7.Text+"','"+this.textBox1.Text+"','"+boBox9.Text+"','"+boBox8.Text+"');selectbno,clno,sno,Weekday,Periodfrom借用wherebno='"+boBox8.Text+"'andclno='"+boBox7.Text+"'andWeekday='"+boBox9.Text+"'andPeriod='"+boBox5.Text+"'";其他代码与之前一样}我要自习privatevoidbutton7_Click(objectsender,EventArgse){try{if(boBox3.Text.Trim()==""){boBox3.Focus();}else{if(boBox4.Text.Trim()==""){boBox4.Focus();}else{MySql="Select教学楼.bname,教室.clnoFrom教室,教学楼Where教学楼.bno=教室.bnoand教室.clnonotin(Select教室.clnoFrom教室,讲授where教室.clno=讲授.clnoand讲授.Usestaus=1and讲授.period=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 事业单位土木工程岗面试历年真题题库及参考答案
- 事业单位综合岗面试高频考题题库及参考答案202
- 2027年备考综合素质 (中学)高分题库附答案
- 2026年湖南铁道职业技术学院高职单招笔试化学历年参考题库含答案解析
- 2026年深圳信息职业技术学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年浙江邮电职业技术学院高职单招笔试职业技能测验历年参考题库含答案解析
- 2026年河南轻工职业学院高职单招笔试语文历年参考题库含答案解析
- 2026年河北旅游职业学院高职单招笔试语文历年参考题库含答案解析
- 2026年江西生物科技职业学院高职单招笔试化学历年参考题库含答案解析
- 2026年江西应用工程职业学院高职单招笔试化学历年参考题库含答案解析
- 北京市高职升本科统一考试英语模拟试题(含答案及详细解析)
- 2027届广东六校联盟高三10月考试数学及答案
- 绵阳科技城新区创业园街道社区卫生服务中心2026年医生招聘(4人)笔试备考题库及答案解析
- 新版【新教材】统编版(2024)七年级上册道德与法治期中复习:必刷100题选择题(含答案解析)
- 2026中国微生物制剂在农业领域应用现状与市场前景
- 2027年浙江省高三高考一模英语试卷试题(含答案详解)
- IEC 61800-3-2023 中文版(可调速电力传动系统 第 3 部分:电磁兼容性要求及其特定试验方法)
- 中医医师资格题库1000题(含答案和解析)
- 2026招生计划历史类
- 2025年铁路局招聘笔试试题及答案
- (2025年)陕西省西安市员额法官遴选面试考题及答案
评论
0/150
提交评论