第一篇:C#课程设计报告书
:课程设计报告书
面向对象方法学
课 程 设 计 报 告
设计题目:学生信息管理系统课程
班 级:13软件工程1班 学 号:20130*** 姓 名:何** 指导教师:庄**老师 设计时间:2014年12月 附件
4摘 要
本文描述的是基于Windows环境的学生信息管理系统,主要功能模块包括:学生信息的增删改查,学生课程的增删改查, 学生成绩的增删改查,用户的增删改查。所用体系构架Client/Server结构。主要工具Microsoft Visual Studio 2010 设计窗体, MYSQL建立数据库,实现学生信息管理的各个功能。运用语言C#与sql语法编程。
本篇报告介绍一个学生信息管理系统的从分析到设计最后到开发的全过程为,给出了学生信息管理系统的设计和技术实现的过程,特别在细节上分析功能和函数的实现思想。
关键词:面向对象,学生信息管理系统,Win7,MYSQL,VS2012,C/S This article describes the Windows environment based student information management system , the main function modules include: Additions and deletions to change search student information , additions and deletions to change search student curriculum , student achievement CRUD user CRUD.The system architecture Client / Server structure.The main tool for Microsoft Visual Studio 2012 design form , MYSQL database was established to achieve the various functions of the student information management.Sql syntax and use of C # programming language.This report describes a student information management system from analysis to design and finally to the whole process of development , the process gives the student information management system design and technology , in particular, to achieve ideological analysis functions and functions in detail.Keywords: object oriented, student information management system,Win7,MYSQL, VS2012, C/S
目录
摘 要..............................................................................................................................................2 绪 论..............................................................................................................................................4 1.1 设计目的...........................................................................................................................4 1.2 开发工具选择...................................................................................................................4 1.3 开发环境...........................................................................................................................4 1.4 本报告的主要内容...........................................................................................................4 需求分析...........................................................................................................................................5 2.1系统需求简介....................................................................................................................5 2.1.1系统目标................................................................................................................5 2.1.2功能需求分析........................................................................................................5 2.1.3性能需求分析........................................................................................................5 总体设计...........................................................................................................................................6 3.1设计概述............................................................................................................................6 3.2系统总体结构及功能模块划分........................................................................................6 3.2.1学生信息管理模块................................................................................................6 3.2.2学生课程管理模块................................................................................................7 3.2.3学生成绩管理模块................................................................................................7 3.2.4系统用户管理模块................................................................................................8 3.3系统数据库概念结构设计................................................................................................8 3.3.1系统E-R图............................................................................................................8 3.3.2系统数据库的设计................................................................................................9 3.4安全保密设计..................................................................................................................10 3.4.1用户登录安全性..................................................................................................10 详细设计.........................................................................................................................................11 4.1概述..................................................................................................................................11 4.2系统程序流程图..............................................................................................................11 4.3系统主要功能模块简介..................................................................................................12 4.3.1系统登录..............................................................................................................12 4.3.2学生信息管理模块..............................................................................................12 4.3.3学生课程管理模块..............................................................................................14 4.3.4学生成绩管理模块..............................................................................................16 4.3.5系统用户管理模块..............................................................................................18 4.3.6版权关于..............................................................................................................20 主要功能模块代码.........................................................................................................................21 5.1 登录界面代码设计..........................................................................................................21 5.2 主页面代码......................................................................................................................26 5.3 系统用户管理模块代码设计..........................................................................................38 5.4 课程信息管理模块代码设计..........................................................................................45 5.5成绩信息管理模块代码设计...........................................................................................52 总结................................................................................................................................................61 参考文献.........................................................................................................................................61 课程设计心得.................................................................................................................................62 3
绪 论
1.1 设计目的
本课程设计的目的是使学生能熟练掌握简单的简单Windows窗体应用程序的设计和ADO.net的应用,希望通过本次课程设计锻炼学生使用C#语言解决实际问题的能力。
1.2 开发工具选择
本系统后台数据库采用MYSQL 数据库,该数据库系统在安全性、准确性和运行速度方面有绝对的优势,并且处理数据量大,效率高;前台采用Microsoft 公司的Visual Studio 2012作为主要开发工具,可与MYSQL 数据库无缝链接。
1.3 开发环境
开发系统:Win7
系统开发平台:Microsoft Visual Studio 2012 系统开发语言:C# 数据库管理软件:MYSQL 1.4 本报告的主要内容
本报告详细的介绍了学生信息管理系统的开发过程,主要涉及到的工作如下:系统的需求分析、系统的总体设计、系统的概念设计、系统各模块的详细设计、系统运行与测试。
需求分析
2.1系统需求简介
2.1.1系统目标
(1)根据查询条件实现学生信息的查询
(2)学生选课信息查询、成绩信息和用户信息的查询
(3)学生信息、课程信息、成绩信息、用户信息的增加、删除、修改(4)对基本信息完成增加、删除、修改时,需注意表与表之间的关联 2.1.2功能需求分析
本系统的功能需求分析如下:
(1)学生信息查询:可以根据学号进行查询.(2)学生信息管理:主要是用于学生信息添加、删除、修改;(3)学生成绩查询:可以根据学号进行查询.(4)学生成绩管理:主要是用于学生成绩添加、删除、修改;(5)课程信息查询:可根据菜单进行查询.(6)课程信息管理:主要是用于课程信息添加、删除、修改;(7)用户信息查询:可根据菜单进行查询.(8)用户信息管理:主要是用于用户信息添加、删除、修改; 2.1.3性能需求分析
(1)登录、用户界面需求:简洁、易懂、易用、友好的用户界面。(2)安全保密性需求:只有凭借用户名和密码登陆系统,只有管理员才能进行信息的管理,非管理员只能查看信息。
总体设计
3.1设计概述
根据需求把整个系统分化成不同的模块,每个模块完成一个特定的子功能。把这些模块结合起来组成一个整体。逐一实现各个功能;
3.2系统总体结构及功能模块划分
经过对系统的需求分析,学生信息管理系统主要划分为三个部分:学生信息查询,学生信息管理,学生成绩录入三个功能模块。如图3.2.0 系统的总体结构。
学生信息管理系统学生信息管理
学生课程管理学生成绩管理系统用户管理 图3.2.0 系统的总体结构
3.2.1学生信息管理模块
学生信息管理:主要是用于学生信息添加、删除、修改,如图3.2.1学生信息管理模块结构。
学生信息管理模块添加学生信息删除学生信息修改学生信息
图3.2.1 3.2.2学生课程管理模块
学生课程管理:主要是用于学生课程添加、删除、修改,如图3.2.2学生课程管理模块结构。
学生课程管理模块添加课程信息
删除课程信息修改课程信息
图3.2.2
3.2.3学生成绩管理模块
学生成绩管理:主要是用于学生成绩添加、删除、修改,如图3.2.3学生成绩管理模块结构。
学生成绩管理模块添加学生成绩
删除学生成绩修改学生成绩
图3.2.3 3.2.4系统用户管理模块
系统用户管理:主要是用于系统用户添加、删除、修改,如图3.2.4系统用户管理模块结构。
系统用户管理模块添加用户 删除用户修改用户 图3.2.4 3.3系统数据库概念结构设计
根据对数据项与数据结构的分析,设计出能够满足系统需求的各种实体,及它们之间的关系,为后面的逻辑结构设计打下基础。3.3.1系统E-R图
系统E-R图可以将各个实体之间的关系显示出来,将各个实体间的属性依赖表示明白。如图3.3.1系统E-R图结构。
姓名性别年龄院系考核籍贯用户表用户名成绩表学号学号课程ID课程名类型学分学生表选课课程表理论学时实验学时用户密码用户类型成绩课程名称 图3.3.1系统E-R图结构 3.3.2系统数据库的设计
综合以上分析,要实现上面的所有功能模块,主要设计表如下:
表3.3.2.1 用户表(user)
表3.3.2.2成绩表(grade)
表3.3.2.3课程表(course)
表3.3.2.4学生表(stu)
3.3.3数据库的连接配置
①先在项目中引用MySQLDriverCS.dll ②类添加 using MySQLDriverCS;③MySQLConnection conn = new MySQLConnection(new MySQLConnectionString(“数据库名”, “Server帐号”, “密码”).AsString);3.4安全保密设计
3.4.1用户登录安全性
系统设计了登录界面,每个合法用户有用户名及一个密码,只有当用户输入正确的用户名及密码组合后才能够对学生信息进行操作。
详细设计
4.1概述
详细设计阶段的根本目标是确定应该怎样具体的实现所要求的系统,也就是说,经过这个阶段的设计工作,应该得出目标系统的精确描述,从而在编码阶段可以把这个描述直接翻译成用某种程序设计语言书写的程序。
4.2系统程序流程图
程序流程图又称为程序框图,它是历史悠久使用最广泛的描述软件设计的方法。它可将整个程序的总体流程清楚明白的显示出来。如图4.2.1系统总流程图结构。
图4.2.1系统总体流程图
4.3系统主要功能模块简介
4.3.1系统登录
用户凭借用户名及密码登录,成功登录后可对学生信息进行操作。用户界面如图4.3.1 用户登录界面所示。
图4.3.1 用户登录界面
4.3.2学生信息管理模块
学生信息管理:通过程序主界面的添加学生信息按钮可添加学生信息(如图
4.3.2添加信息窗口)。学生信息进行详细信息管理(如图4.3.3 信息管理)包括删除信息(如图 4.3.4删除信息提示)和修改信息(如图4.3.5 修改信息窗口)。
图4.3.2添加信息窗口
图4.3.3 信息管理
图4.3.4删除信息提示
图4.3.5 修改信息窗口
4.3.3学生课程管理模块
学生课程管理:通过程序主界面的菜单-->系统-->课程管理 可添加课程信 14
息(如图 4.3.5信息管理)和 详细的课程管理(如图4.3.6 添加信息窗口)和(如图4.3.7 删除信息提示)和(如图4.3.8 修改信息窗口)。
图 4.3.5信息管理
4.3.6 添加信息窗口
图4.3.7 删除信息提示
图4.3.8 修改信息窗口
4.3.4学生成绩管理模块
学生信息管理:选择一行学生信息通过程序主界面的查看-->学生成绩按钮,查看该学生的成绩信息(如图 4.3.7查看信息窗口)。查看后还可以添加该学生的成绩(如图 4.3.8添加信息窗口)、删除该学生的成绩(如图 4.3.9删除提示窗口)和修改该学生的成绩(如图 4.3.10修改信息窗口)
图4.3.7成绩管理
4.3.8添加信息窗口
图 4.3.9删除提示窗口 17
图 4.3.10修改信息窗口
4.3.5系统用户管理模块
系统用户管理:通过程序主界面的菜单-->系统-->用户管理,查看该系统用户的信息(如图 4.3.11查看信息窗口)。查看后还可以添加该系统的用户(如图 4.3.12添加信息窗口)、删除该系统的用户(如图 4.3.13删除提示窗口)和修改该系统的用户(如图 4.3.14修改信息窗口)
4.3.11查看信息窗口
图 4.3.12添加信息窗口
图 4.3.13删除提示窗口
图 4.3.14修改信息窗口
4.3.6版权关于
版权关于:图4.3.15版权关于
图4.3.15版权关于
主要功能模块代码
5.1 登录界面代码设计
namespace SIMS_1 { public partial class Log : Form { String check = “abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890”;string check_4 = “";
Random r = new Random();
public Log(){ InitializeComponent();
for(int i = 0;i < 4;i++){ int n=r.Next(0,61);check_4 += ”“ + check[n];} l_check.Text = check_4;
}
private static String id, password, type;public static int Flag = 1;
String flag = ”“;
MySQLConnection con = new MySQLConnection(new MySQLConnectionString(”students“, ”root“, ”123456“).AsString);
private void bt_log_Click(object sender, EventArgs e){ try { id = txt_id.Text.Trim();password = txt_password.Text.Trim();if(this.rb_log_Manager.Checked){ type = ”管理员“;} if(this.rb_Log_Not_Manager.Checked){ type = ”非管理员“;}
// 如果输入的帐号和密码与系统的帐号密码一致就进入本系统
con.Open();MySQLCommand setformat = new MySQLCommand(”set names gb2312“, con);setformat.ExecuteNonQuery();setformat.Dispose();
string sql = ”select * from user where 用户名='“ + id + ”' and 用户密码='“ + password + ”'and 用户类型='“ + type + ”'“;
MySQLDataAdapter adapter = new MySQLDataAdapter(sql, con);DataSet set = new DataSet();adapter.Fill(set,”user“);
this.dataView.DataSource = set.Tables[”user“];int rowcount = dataView.RowCount1;if(rowcount == 0){ MessageBox.Show(”您还未添加课程!“);} con.Close();
}
public static String name1 = ”“;public static String id1 = ”“;private void bt_grade_Click(object sender, EventArgs e){ try { id1 = dataView.SelectedRows[0].Cells[0].Value.ToString();name1 = dataView.SelectedRows[0].Cells[1].Value.ToString();
Grade g = new Grade();g.Show();g.Text = name1 + ”:的成绩单“;
con.Open();
MySQLCommand setformat = new MySQLCommand(”set names gb2312“, con);setformat.ExecuteNonQuery();setformat.Dispose();string sql1 = ”select * from grade where 学号=“+id1;MySQLDataAdapter adapter = new MySQLDataAdapter(sql1, con);DataSet set = new DataSet();adapter.Fill(set, ”grade“);g.dataView1.DataSource = set.Tables[0];int rowcount = g.dataView1.RowCount1;if(rowcount == 1)
{ MessageBox.Show(”该学号的学生已存在!“);} else {
{ } {
{ } { flag_exception = 1;} { } { + sex + ”',“ + if(id.Equals(”“))MessageBox.Show(”请输入学号!“);else try Int64 id1 = Convert.ToInt64(id);catch(FormatException)if(flag_exception == 1)MessageBox.Show(”请输入正确的学生学号!“);else String sql1 = ”insert into stu values('“ + id + ”','“ + name + ”','“"'” + age + “','” + depart + “','” + nation + “')”;
MySQLCommand command = new MySQLCommand(sql1, Students.con);command.ExecuteNonQuery();Students.con.Close();
MessageBox.Show(“操作成功!”);this.Dispose();} } } }
private void bt_Add_cancel_Click(object sender, EventArgs e){ this.Dispose();} } }
5.3 系统用户管理模块代码设计
namespace SIMS_1 { public partial class registered : Form { public registered(){ InitializeComponent();if(Log.Flag == 0){ 38
bt_registered_add.Hide();bt_registered_delete.Hide();bt_registered_change.Hide();} }
private void bt_registered_refresh_Click(object sender, EventArgs e){ Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();string sql1 = “select * from user”;MySQLDataAdapter adapter = new MySQLDataAdapter(sql1, Students.con);DataSet set = new DataSet();adapter.Fill(set, “user”);this.dataView_user.DataSource = set.Tables[0];}
private void bt_registered_add_Click(object sender, EventArgs e){ registered_add registered_add = new registered_add();registered_add.Show();}
private void bt_registered_delete_Click(object sender, EventArgs e){ try { String id =
this.dataView_user.SelectedRows[0].Cells[0].Value.ToString();
if(MessageBox.Show(“是否要删除用户名为:” + id + “ 的用户?”, “确认”, MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes){ Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();String sql = “delete from user where 用户名='” + id + “'”;MySQLCommand command = new MySQLCommand(sql, Students.con);command.ExecuteNonQuery();Students.con.Close();MessageBox.Show(“删除成功!”, “提示!”, MessageBoxButtons.OK);} } catch(ArgumentOutOfRangeException){ MessageBox.Show(“您还没有选择一行要删除的数据!”);} catch(NullReferenceException){ MessageBox.Show(“您选择行的数据无效!”);} }
private void bt_registered_change_Click(object sender, EventArgs e){
try { String user_name = this.dataView_user.SelectedRows[0].Cells[0].Value.ToString();String password = this.dataView_user.SelectedRows[0].Cells[1].Value.ToString();String type = this.dataView_user.SelectedRows[0].Cells[2].Value.ToString();
Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();String sql = “delete from user where 用户名='” + user_name + “'”;MySQLCommand command = new MySQLCommand(sql, Students.con);command.ExecuteNonQuery();Students.con.Close();
registered_add r = new registered_add();r.Show();
r.txt_user_name.Text = user_name;r.txt_user_password.Text = password;if(type.Equals(“管理员”)){ r.rb_guanli.Checked = true;} else {
r.rb_nomal.Checked = true;}
r.Text = “修改”;r.bt_registered_add_cancle.Hide();} catch(ArgumentOutOfRangeException){ MessageBox.Show(“您还没选择一行要修改的数据!”);} catch(NullReferenceException){ MessageBox.Show(“您选择行的数据无效!”);}
} } }
5.3.1添加系统用户模块代码设计
namespace SIMS_1 { public partial class registered_add : Form { public registered_add(){ InitializeComponent();}
private void bt_registered_add_Ok_Click(object sender, EventArgs e){ int ExceptionFlag = 0;String user_name = txt_user_name.Text;String password = txt_user_password.Text;String type = rb_guanli.Checked ? “管理员” : “非管理员”;Int64 no=0;
Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();
String sql = “select * from user where 用户名='” + user_name + “'”;MySQLDataAdapter adapter = new MySQLDataAdapter(sql, Students.con);DataSet set = new DataSet();adapter.Fill(set);this.dataGridView1.DataSource = set.Tables[0];
int rowcount = dataGridView1.RowCount1;MessageBox.Show(“查找到” + rowcount + “个课程的信息!”);if(rowcount == 0){ MessageBox.Show(“您还未添加课程!”);} Students.con.Close();} } }
5.4.1添加课程信息模块代码设计
namespace SIMS_1 { public partial class Course_Add : Form
{ public Course_Add(){ InitializeComponent();}
private void bt_course_add_Ok_Click(object sender, EventArgs e){ int flag_exception = 0;String id = this.txt_course_id.Text;String name = this.txt_course_name.Text;String type = this.rbt_Obligatory.Checked ? “必修” : “选修”;decimal credit = this.num_Credit.Value;decimal theory= this.num_Theory.Value;decimal experiment = this.num_Experiment.Value;
Students.con.Open();MySQLCommand setformat = new MySQLCommand(“set names gb2312”, Students.con);setformat.ExecuteNonQuery();setformat.Dispose();String sql = “select * from course where 课程ID='” + id + “'”;MySQLDataAdapter adapter = new MySQLDataAdapter(sql, Students.con);DataSet set = new DataSet();adapter.Fill(set);this.dataView1.DataSource = set.Tables[0];int rowcount = dataView1.RowCount-1;if(rowcount == 1){ MessageBox.Show(“该课程ID已存在!”);}
第二篇:C#课程设计A - 期末 2014.6.5
一、课程设计目的1、要求学生达到熟练掌握.NET基本结构以及C#语言的基本知识和技能;
2、基本掌握面向对象程序开发的基本思路和方法;
3、掌握GUI、文件、网络及ADO.NET数据库开发基本知识;
4、能够利用所学的基本知识和技能,进行简单应用程序设计。
二、课程设计题目 1.计算器
设计一个计算器,能够实现加、减、乘、除、取余等基本算术运算。功能描述:
1)能够实现加、减、乘、除、取余等基本算术运算。2)有帮助菜单,主要介绍使用方法与程序信息。3)有退格键的功能,可删除输入的最后一个数字。4)实现开方、平方、倒数的运算。2.学生成绩管理系统
详细设计规划有关该系统基本信息的描述,如:学生信息(学号、姓名、性别等),成绩信息(如课程代码、成绩、学号等)等等。
功能描述:
1)基础数据维护。2)提供帮助信息。
3)能够实现成绩的输入、查询与修改、删除、分析、统计等功能。3.单文档文本编辑器
设计一个单文档文本编辑器,能够实现对文本的编辑。窗体应有:菜单栏、工具栏、状态栏、工具提示等。
功能描述:
1)文件操作能够实现:新建文档、保存文档、打开文档、关闭文档、页面设置等。
2)编辑操作能够实现对文本内容的选择、剪切、复制、粘贴、查找、替换等。
3)格式操作能够实现对文本内容的字体、颜色等设置。4)查看操作能够实现状态栏的显示与隐藏。5)帮助操作能够显示版本信息等。4.多文档文本编辑器
设计一个多文档文本编辑器,能够实现对文本的编辑。窗体应有:菜单栏、工具栏、状态栏、工具提示(类似Word)等。
功能描述:
1)文件操作能够实现:新建文档、保存文档、打开文档、关闭文档、页面设置等。
2)编辑操作能够实现对文本内容的选择、剪切、复制、粘贴、查找、替换等。
3)格式操作能够实现对文本内容的字体、颜色等设置。
4)窗口操作能够实现对窗体的层叠、水平平铺、垂直平铺排列。5)帮助操作能够显示版本信息等。5.通讯录
设计一个windows通讯录程序,能够实现添加、查询、修改、删除、显示通讯录记录等操作。
功能描述:
1)基础数据维护。
2)提供使用帮助信息。
3)能够实现添加、查询、修改、删除、显示通讯录记录等操作。要求:
1)要求利用C#的编程思想以及组件开发原理来完成系统的设计;
2)突出C#语言与其它语言不同点(即体现C#的高级功能,如属性概念、接口、事件、委托等);
3)体现可视化编程基本东西,如系统带有菜单、工具栏、状态栏以及常用的高级控件。
三、课程设计须提交的内容:
1、程序代码
课程设计结束时,将完整的程序代码以电子版的形式提交。
2、课程设计报告
内容包括: 1)目录
2)设计目的与要求 3)主要功能描述 4)主要算法流程图
5)关键源代码编程步骤 6)运行结果分析和总结 7)此次课程设计的收获 8)遇到的问题 9)参考资料
注意:统一用A4纸
第三篇:C#课程设计报告参考解读
作业编号2017
安徽工业大学.Net平台与C#开发课程设计
学生管理系统
《.Net平台与C#开发课程设计》报告书
专 业 学 号
学生姓名 指导教师 分 数
2017年6月
目录
1、需求分析..............................................................................3
2、总体设计..............................................................................3
3、数据描述..............................................................................4
4、详细设计..............................................................................6
5、主要代码实现和分析..........................................................9
6、课程设计总结....................................................................12
7、参考资料............................................................................12
设计报告
1、需求分析
学生管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,是典型的管理系统(Manage System On Studant)。它是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,它能够为用户提供充足的信息和快捷的查询手段。能有效的帮助学校和老师掌握学生的情况,为学生提供成绩跟课程方面的查询。
学生用户通过输入学生基本信息、课程基本信息等,由系统自行生成相应的数据以供学生查询,管理用户还可以对这些基本信息进行更新和删除,学生管理系统力求给用户方便快捷的途径去管理这些繁琐的数据。具体系统功能需求描述如下:
在学生管理系统中,主要有用户登陆、班级信息管理、学生信息管理、课程信息管理、科目信息管理、成绩信息管理、教师信息管理、用户管理等功能,功能分析如下:(1)用户登陆
学生管理系统用户名及密码验证模式,进入学生管理系统前,用户必须在登陆页面输入用户名及密码,只有验证通过的用户方可进入学生管理系统操作主界面。(2)班级信息管理
包括3个功能模块:班级信息的添加、班级信息的修改和删除以及班级信息的查询。(3)学生信息管理
包括3个功能模块:学生个人信息的添加、学生信息的修改和删除以及学生信息的查询。(4)课程信息管理
包括3个功能模块:课程基本信息的添加、课程信息的修改和删除以及课程信息的查询。(5)科目信息管理
包括3个功能模块:科目基本信息的添加、科目信息的修改和删除以及科目信息的查询。(6)成绩信息管理
包括3个功能模块:成绩基本信息的添加、成绩信息的修改和删除以及成绩信息的查询。(7)教师信息管理
包括3个功能模块:教师基本信息的添加、教师信息的修改和教师以及课程信息的查询。(8)用户管理
包括2个功能模块:用户信息添加、用户密码的修改和注销(即 重新登录)。
2、总体设计
1、系统的主要功能模块
登录模块、添加模块、修改删除模块、查询模块
总体结构
学生管理系统 登录系统 班级管理 班级添加 班级修改 班级删除 班级查询 学生管理 课程管理 学生添加 学生修改 学生删除 学生查询 课程添加 课程修改 课程删除 课程查询 科目管理 科目添加 科目修改 科目删除 科目查询 成绩管理 成绩添加 成绩修改 成绩删除 成绩查询 系统管理 添加用户 修改密码 重新登录 退出 教师管理 教师添加 教师修改 教师删除 教师查询图2.1 XXXX
3、数据描述
数据库xsglxt的表设计如下:(1)班级表:描述班级信息
表3.1 XXXX
(2)课程表:描述课程信息
(3)科目表:描述科目信息
(4)学生表:描述学生信息
(5)用户表:描述用户信息
(6)教师表:描述教师信息
(2)成绩表:描述成绩信息
4、详细设计
界面设计
(1)登录界面
图4.1 XXXX 该界面是本程序的入口,再输入用户名和密码后只有当文本框输入数据和数据库的已有信息相匹配时才可进入系统主界面,否则会提示输入有误。(2)系统主界面
该窗体是所有子窗体的父窗体,由此窗体可调用其他子窗体,通过子窗体实现相应功能。管理功能菜单包括“添加”,“修改 删除”和“查询”功能,系统菜单包括“教师管理”,“添加用户”,“修改密码”,“重新登录”,“退出”功能。控件notifyIcon1和contextMenuStrip1让系统运行时在通知栏显示小图标,在小图标右击时会弹出菜单。控件stutasStrip1和timer1让系统运行时显示当前时间。(3)功能界面
功能界面因相差不大,不在一一举例,仅以班级管理为例
1、添加界面
该界面实现了将新的学生信息添加到数据库班级信息表(StuB.dbo),为添加信息提供提示和相关文本框,在文本框输入正确的信息后,单击“确定”按钮,软件将所输入的信息通过数据库命令直接添加进数据库班级信息表(StuB.dbo),并提示“添加成功!”在“修改 删除”界面点击“刷新”按钮可看到添加结果在DataGridView控件中显示 2修改删除界面
该界面实现了对已有学生信息的修改和删除,填入相关信息后,点击“修改”(或“删除”)按钮,程序将对比班级编号后文本框的内容与数据库班级信息表(StuB.dbo)第一列的数据是否相同,如某一行的数据相同,则将文本框内的内容替换数据库班级信息表(StuB.dbo)中数据相同行的原有内容并提示“修改成功!”(或删除数据库班级信息表(StuB.dbo)中数据相同行)点击“刷新”按钮可看到修改(删除)结果在 ;如没有相同数据存在,则弹出提示窗口提示“修改失败!”。3查询界面
该界面实现了对已有学生信息的查询,在文本框中输入相关信息后,点击“确定”按钮后,与修改相同,对比输入数据和数据库班级信息表(StuB.dbo)的已有数据,如相同,则将该行信息在DataGridView控件中显示,如不同则不显示。
4添加用户界面
该界面的实现与添加界面相同
5、修改用户密码界面
该界面的实现与修改界面相同
5、主要代码实现和分析
1、用户登录主要代码
if(this.textBox2.Text == “" || this.textBox1.Text == ”“){ MessageBox.Show(”用户名或密码不能为空!“);} else { sql = String.Format(”select * from login where username='{0}' and password='{1}'“, textBox1.Text.Trim(), textBox2.Text.Trim());要执行的SQL语句 com = new SqlCommand(sql, con);con.Open();dr = com.ExecuteReader();if(dr.Read()){ Form2 mf = new Form2();mf.Show();con.Close();this.Hide();} }
2、主界面主要代码
//在通知栏显示小图标,程序运行时不在任务栏显示 public Form2(){ InitializeComponent();notifyIcon1.ContextMenuStrip = this.contextMenuStrip1;this.ShowInTaskbar = false;} //通知栏小图标的双击事件:主界面最小化或打开主界面
private void notifyIcon1_DoubleClick(object sender, MouseEventArgs e){ if(this.WindowState == FormWindowState.Minimized){ this.WindowState = FormWindowState.Normal;this.Activate();} else { this.WindowState = FormWindowState.Minimized;} } //打开某一界面(例:打开成绩管理界面)
private void 添加ToolStripMenuItem1_Click(object sender, EventArgs e){ Cjgl Cj = new Cjgl();Cj.Show();}
3、修改界面主代码
SqlConnection con = new SqlConnection(”Data Source=李国豪;Initial Catalog=xsgl;Integrated Security=True“);//连接数据库
SqlCommand cmd = new SqlCommand(”Insert into StuB values('“ + textBox1.Text + ”','“ + textBox2.Text + ”','“ + DateTime.Parse(dateTimePicker1.Text)+ ”','“ + textBox4.Text + ”','“ + textBox5.Text + ”','“ + comboBox1.Text + ”','“ + textBox6.Text + ”')“, con);//要执行的SQL语句
try { con.Open();cmd.ExecuteNonQuery();//执行 MessageBox.Show(”添加成功!“);} catch(SqlException ex){ MessageBox.Show(”添加失败!“+ ex.Message);}
4、修改 删除界面主代码
private void button5_Click(object sender, EventArgs e){ string connString = ”Initial Catalog=xsgl;Data Source =李国豪;Integrated Security=true“;//连接数据库命令
SqlConnection con = new SqlConnection(connString);if(this.textBox10.Text == ”“ || this.textBox11.Text == ”“ || this.textBox12.Text == ”“ || this.textBox9.Text == ”“ || this.textBox3.Text == ”“ || this.dateTimePicker2.Text == ”“ || this.comboBox2.Text == ”“){ MessageBox.Show(”必填项不能为空!“);} else { string sql = ”Update StuB set 班级编号 ='“ + textBox10.Text + ”', 班级名称='“ + textBox11.Text + ”',入学时间='“ + DateTime.Parse(dateTimePicker2.Text)+ ”',学制=“ + textBox12.Text + ”,专业='“ + textBox9.Text + ”',班主任='“ + comboBox2.Text + ”',备注='“ + textBox3.Text + ”'“ + ”where 班级编号='“ + textBox10.Text + ”'“;//要执行的SQL语句
try { con.Open();SqlCommand cmd = new SqlCommand(sql, con);cmd.ExecuteNonQuery();//执行 MessageBox.Show(”修改成功!“);con.Close();} catch(Exception ex){ MessageBox.Show(”修改失败!“ + ex.Message);} textBox9.Clear();textBox10.Clear();textBox11.Clear();textBox12.Clear();textBox3.Clear();} } private void button6_Click(object sender, EventArgs e){ SqlConnection conn = new SqlConnection(connString);DialogResult ret = MessageBox.Show(”确定要删除吗?“, ”删除“, MessageBoxButtons.OKCancel);if(ret == DialogResult.Cancel)return;string sql = ”delete from StuB where 班级编号='“ + temp +”'“;//要执行的SQL语句 SqlCommand cmd = new SqlCommand(sql, conn);try { conn.Open();int rows = cmd.ExecuteNonQuery();//执行命令 if(rows == 1)MessageBox.Show(”删除成功!“, ”提示“, MessageBoxButtons.OK, MessageBoxIcon.Information);} catch(SqlException ex){ MessageBox.Show(”删除失败!“ + ex.Message);} conn.Close();} private void dataGridView2_RowHeaderMouseClick(object sender, DataGridViewCellMouseEventArgs e){ DataGridViewRow dgvRow = dataGridView2.Rows[e.RowIndex];DataGridViewCellCollection dgvCC = dgvRow.Cells;temp = dgvCC[0].Value.ToString();}// dataGridView2的单击事件,用于获得选定行的第一个数据
private void button7_Click(object sender, EventArgs e){ sql = ”select * from StuB“;//要执行的SQL语句 ds = new DataSet();da = new SqlDataAdapter(sql, DBHelper.sqlcon);//创建DataAdapter数据适配器实例
da.Fill(ds, ”StuB“);使用DataAdapter的Fill方法(填充),调用SELECT命令
dataGridView2.DataSource = new BindingSource(ds, ”StuB“);} } }
5、查询界面主代码
private void button3_Click(object sender, EventArgs e){ DataSet ds = new DataSet();SqlConnection con = new SqlConnection(”Data Source=李国豪;Initial Catalog=xsgl;Integrated Security=True“);if(this.textBox7.Text == ”“ || this.textBox8.Text == ”“){ MessageBox.Show(”必填项不能为空!“);} else { SqlDataAdapter sda = new SqlDataAdapter(”select 班级编号,班级名称,入学时间,学制,专业,班主任,备注 from StuB where 班级编号 = '“ + this.textBox7.Text.Trim()+ ”'and 班级名称='“ + this.textBox8.Text.Trim()+ ”'", con);DataTable table = new DataTable();sda.Fill(table);dataGridView1.DataSource = table;//声明数据集并将查询结果填充进数据集,再将数据集中的数据填充进控件dataGridView1 textBox7.Clear();textBox8.Clear();} }
6、课程设计总结
通过这次课程设计,实现了一个简单的学生管理系统,而我也对C#软件开发有了更深一步的认识,也学到了很多在课堂上没有学到的东西。对于VS2012和SQL2008的使用也更加熟练。系统中存在的一些不足和系统设计上存在的缺憾,说明自己在这些方面还有很多不足之处有待自己进一步学习、提高。
在本次课程设计中,老师朱会东和同学们给了我很大的指导帮助,从他们哪里我学到了很多,在次表示感谢!
7、参考资料
[1] 《SQL Server 2008 数据库及应用》 李伟 著
清华大学出版社 [2] 《C#程序设计及应用教程》李伟 著
清华大学出版社 [3] 网络资源:http://www.xiexiebang.com
第四篇:OS课程设计报告书
南通大学计算机学院课程设计
报告书
设计题目
专业班级
学生姓名
学号
指导教师
日期
目录
一级目录1……………………………………………………………页码 一级目录2……………………………………………………………页码 …………
1.课程设计题目:
2.课程设计目的:
3.课程设计要求:
4.课程设计报告内容(本项下级标题可根据课程设计的内容由指导教师适当调整)
4.1 系统主要功能
4.1.1功能描述
4.1.2 系统功能结构图
4.2 系统数据结构清单
4.3 系统代码实现
4.4 系统测试
4.4.1系统测试数据清单
4.4.2系统测试结果
4.5统存在的主要问题及注意事项
4.6.设计总结及体会
参考书目:(五号,宋体加粗)
[1] 作者,《书名》,出版地,出版社,出版年月
[2] …………………………………………………………………………..
第五篇:linux操作系统课程设计报告书
题目1 进程软中断通信
1.1 题目的主要研究内容及预期达到的目标
实现进程的软中断通信:父进程发信号控制子程序的终止。
1.2 题目研究的工作基础或实验条件
(1)硬件环境:Linux平台。(2)软件环境:标准C语言。
1.3 设计思想
系统调用fork()创建两个子进程,再调用signal()让父进程捕捉键盘上的中断信号(即按Ctrl + C键);当捕捉到中断信号后,父进程调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:
Child Process 1 is Killed by Parent!Child Process 2 is Killed by Parent!
父进程等待两个子进程终止后,输出如下的信息后终止:
Parent Process is Killed!
1.4 流程图
创建子进程p1NoP1 > 0Yes创建子进程p2No子进程P2等待父进程SIGSUR2消息后输出Child Process 2 is Killed by Parent!子进程P1等待父进程SIGSUR1消息后输出Child Process 1 is Killed by Parent!P2 > 0Yes
父进程等待子进程都结束后输出Parent process is killed!1.5 主要程序代码
#include“stdio.h” #include“unistd.h” #include“signal.h” #include“sys/types.h” #include“stdlib.h” int k = 0;int p1,p2;// pid_t child1 = 0,child2 = 0;void func_father(int sig)// 父进程信号处理函数; { // 传送参数sig指定的信号给参数pid指定的进程;返回值:0:成功;-1:出错; // 信号宏名:SIGUSR1,用户定义信号1,信号值:10,默认动作:终止进程;
} void func_p1(int sig)// 子进程p1信号处理函数; { k=1;// 标志相应SIGUSR1消息结束;} kill(p1, SIGUSR1);kill(p2, SIGUSR2);
void func_p2(int sig)// 子进程p2信号处理函数; { k=1;// 标志相应SIGUSR2消息结束;} int main(){
while((p1 = fork())==-1);// fork()=-1创建子进程失败;
if(p1 > 0)// 父进程继续创建子进程p2; {
}
else // 子进程p1 while((p2 = fork())==-1);if(p2 > 0)// 父进程 { // 设置信号处理方式,依照参数signum指定的信号编号设置处理函数; // 指定信号到达时跳转到参数handler指定的函数执行;
// 返回值:成功:返回先前信号处理函数指针;出错:SIG_ERR(-1);
} else {
} signal(SIGINT, SIG_IGN);// 忽略本应给父进程的按键中断; signal(SIGUSR2, func_p2);// 接收父进程的消息后转到处理函数; k = 0;while(k == 0);
// 等待子进程2收到父进程的消息后置k=1
// 子进程p2 signal(SIGINT, func_father);wait(0);// 等待子进程1结束 wait(0);// 等待子进程2结束 printf(“Parent process is killed!n”);exit(0);
printf(“Child Process 2 is Killed by Parent!n”);exit(0);
{
} } return 0;signal(SIGINT, SIG_IGN);// 忽略本应给父进程的按键中断; signal(SIGUSR1, func_p1);// 接收父进程的消息后转到处理函数; k = 0;while(k == 0);
// 等待子进程1收到父进程的消息后置k=1 printf(“Child Process 1 is Killed by Parent!n”);exit(0);1.6 运行结果及分析
当按下Ctrl + C后,产生消息响应。
1.7 心得体会
通过本次实验,掌握了如何创建进程以及进程的软中断。
题目2 进程的管道通信
2.1 题目的主要研究内容及预期达到的目标
实现进程的管道通信。
2.2 题目研究的工作基础或实验条件
(1)硬件环境:Linux平台。(2)软件环境:标准C语言。
2.3 设计思想
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分
别向管道各写一句话:
Message from Child l!Message from Child 2!
父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1的消息,再接收子进程P2的消息。
2.4 流程图
创建管道创建子进程p1NoP1 = 0Yes“Message from Child l!”放入缓冲区中把缓冲区所指内容写入50个字节到fd[1]指定的文件No创建子进程p2P2 = 0Yes“Message from Child 2!”放入缓冲区中把缓冲区所指内容写入50个字节到fd[1]指定的文件父进程从管道读出长度为50字节的字符串,并打印
2.5 主要程序代码
#include
int fd[2];// 打开文件的文件描述符数组fd[0]读,fd[1]写;
char outpipe[100],inpipe[100];
pipe(fd);// 先创建管道,再创建子进程
while((pid1 = fork())==-1);// fork()=-1创建子进程失败
if(pid1 == 0)// Child1
{ lockf(fd[1],1, 0);// 建立互斥文件锁
sprintf(outpipe,“Message from Child l!”);// 把串放入数组outpipe中
write(fd[1], outpipe, 50);// 把outpipe所指内存写入50个字节到fd[1]的文件;
sleep(5);
/*自我阻塞5秒*/ lockf(fd[1],0,0);// 解除互斥文件锁
exit(0);
}
else // pid1 > 0
{
while((pid2 = fork())==-1);
if(pid2 == 0)// Child2
{
lockf(fd[1],1, 0);/*互斥*/
sprintf(outpipe,“Message from Child 2!”);
write(fd[1], outpipe, 50);
sleep(5);
lockf(fd[1], 0, 0);
exit(0);
}
else // pid1 > 0 && pid2 > 0,父进程
{
wait(0);
/*同步*/
read(fd[0], inpipe, 50);
/*从管道中读长为50字节的串*/
printf(“%sn”, inpipe);
wait(0);
read(fd[0], inpipe, 50);
printf(“%sn”, inpipe);
exit(0);
}
}} 1.6 运行结果及分析
父进程先接收子进程1的消息再接受子进程2的消息,并打印。
1.7 心得体会
通过本次实验,掌握了如何创建管道以及利用管道方式进程间通信。
题目3 进程间通信设计
3.1 题目的主要研究内容及预期达到的目标
利用消息队列实现进程间的通信。
3.2 题目研究的工作基础或实验条件
(1)硬件环境:Linux平台。(2)软件环境:标准C语言。
3.3 设计思想
使用系统调用msgget(),msgsnd(),msgrev()及msgctl()编制一长度为512B的消息的发送和接收程序。
3.4 流程图 用ftok函数建立IPC通信需要的ID值发送端用ftok函数返回IPC通信需要的ID值接收端用msgget函数返回队列标识符用msgget函数创建消息队列并返回标识符向缓冲区中输入1K的字符串消息清空接收缓冲区用msgsnd函数发送消息到消息队列用msgrcv函数接收消息队列中消息
3.5 主要程序代码 发送方主要代码:
int main(int argc, char **argv)
{
int msqid;
struct msgbuf buf;
int flag;// 发送消息返回值0:成功;
int key;// 创建IPC通讯ftok出的键值;
int sendlength;// 发送消息的大小,不含消息类型long占用的4个字节;
key = ftok(“msg.tmp”, 0x01);// 返回系统建立IPC通讯时需要的ID值;
if(key < 0)
{
perror(“ftok key error”);
return-1;
}
msqid = msgget(key, 0600 | IPC_CREAT);// 创建队列对象并返回标识符;
if(msqid < 0)
{
perror(“create message queue error”);
return-1;
}
buf.mtype = 1;
strcpy(buf.mtext, “This is a test of Inter-Progress Connumation
which made by Shi Zhongyu who majors in Computing Science
and Technology, Information Science and Engineering School,Shen Yang University of Technology.”);
sendlength = sizeof(struct msgbuf)sizeof(long);// 接收消息的大小;
memset(&buf1, 0x00, sizeof(struct msgbuf));// 清空buf1结构体;
mtype = 1;// mtype > 0 :接收类型等于发送消息类型的第一个消息;
// 从标识符msqid的队列读取消息存于msgp,再删除队列中消息;
flag = msgrcv(msqid, &buf1, recvlength ,mtype, 0);if(flag < 0){
perror(“recv message errorn”);
return-1;} printf(“ message :%sn”, buf1.mtext);
system(“ipcs-q”);// 创建子进程执行命令:显示消息队列;
return 0;} 3.6 运行结果及分析
先发送消息到已存在的文件msg.tmp,读取消息后自动删除消息。再利用ipcrm-q 294912(msqid)删除该消息队列。
3.7 心得体会
通过本次实验,掌握了如何创建消息队列进行进程间通信。
题目4 利用多进程实现生产者消费者问题
4.1 题目的主要研究内容及预期达到的目标
利用多进程实现生产者消费者问题。
4.2 题目研究的工作基础或实验条件
(1)硬件环境:Linux平台。(2)软件环境:标准C语言。
4.3 设计思想
创建两个子进程;一个子进程(生产者进程)依次向缓冲区写
入整数0,1,2,...,9;另一个子进程(消费者进程)暂停5s后,从缓冲区读数,每次读一个,并将读出的数字从缓冲区删除,然后将 数字显示出来;父进程等待子进程2(消费者进程)的退出信息,待收集到该信息后,父进程就返回。
4.4 流程图
创建管道创建子进程p1NoP1 = 0Yes向缓冲区递增写入0到9创建子进程p2把缓冲区所指内容写入10个字节到fd[1]指定的文件No让子进程p1与p2轮流执行,并打印运行结果P2 = 0Yes暂停5秒,等待生产者写数把fd[0]所指文件传送10个字节到缓冲区指针所指的内存中,并打印出来
3.5 主要程序代码 int main(void)
{
int i = 0;int *nCount;
int fd[2];// 打开文件描述符数组fd[0]读fd[1]写;
char szBuff[11] = {0};int status;
pipe(pfd);// 先创建管道,再创建子进程
while((pid1 = fork())==-1);// fork()=-1创建子进程失败;
if(pid1 == 0)// Child1,生产者进程
{
nCount =(int *)(malloc(sizeof(int)* 10));// 分配40个字节的内存块;
for(i = 0;i < 10;++i)
{
nCount[i] = i;
sprintf(szBuff, “%s%d”, szBuff, nCount[i]);// 向szBuff中写入“0i”;
}
write(fd[1], szBuff, strlen(szBuff));// 把szBuff所指的内存到fd[1]的文件;
free(nCount);// 释放内存块;
close(fd[0]);close(fd[1]);
}
else // pid1 > 0
{
while((pid2 = fork())==-1);
if(pid2 == 0)// Child2,消费者进程
{
sleep(5);
read(fd[0], szBuff, 10);// 把fd[0]的文件传送到szBuff指向的内存中;
printf(“%sn”, szBuff);
close(fd[0]);close(fd[1]);
}
else // pid1 > 0 && pid2 > 0,父进程
{
pid1 = wait(&status);// wait(0);
/*同步*/
i = WEXITSTATUS(status);
printf(“child1 is %d ,exit status =%dn”, pid1, i);
pid2 = wait(&status);
i = WEXITSTATUS(status);
printf(“child2 is %d ,exit status =%dn”, pid2, i);
}
}
close(fd[0]);close(fd[1]);
return 0;
} 4.6 运行结果及分析
生产者进程依次想缓冲区写入0~9,消费者进程暂停5秒后从缓冲区读数,读一个删一个。然后将数字显示出来,并打印子进程号。
4.7 心得体会
通过本次实验,掌握了如何创建消息队列进行模拟生产者消费者问题。
总结
通过本次操作系统课程设计,掌握了Linux平台下的相关进程通信的知识。以下是自己通过查阅相关文献整理的Linux系统编程的部分学习笔记。
进程间通信类型有:管道、信号、消息队列等。
进程间通信的目的:数据传输、共享数据、通知事件、资源共享、进程控制。管道是将两个file结构指向同一临时VFS索引节点,VFS索引节点指向同一物理页的一种通信方式;适用于输入、输出数据量特别大时的父子进程间通信IPC机制;所有进程完成管道操作后,索引节点被丢弃,共享数据页被释放。通常先用pipe函数创建一个管道,再通过fork函数创建一个子进程。信号的发生由两类事件引起:硬件原因,如在终端上按DELETE键产生中断信号SIGINT;软件原因,如kill、raise、alarm、setitimer等系统函数,除0的非法运算也会引起信号发送。进程能对每个信号设置独立的处理方式:能忽略信号;也能设置其处理程序(称捕捉),或对信号不做处理,执行系统默认动作; 进程能通过信号集操作函数设置对信号的阻塞(block)标志;信号被设置为阻塞后发生时,和正常的信号一样被传送(deliver)给进程,但只有进程解除其的阻塞才会被处理。即信号被阻塞后,进程不能阻止其的发生,仅阻止其不能被处理;
从信号被传递给进程到其得到处理的时间间隔称信号挂起、未决或被搁置。SIGSTOP和SIGKILL信号不能被捕捉、忽略、阻塞,保证了系统管理员在任何时候都能暂停信号和杀死信号接收某个进程。信号分为可靠(信号值在32~63,支持排队)和不可靠信号(信号值小于32,不支持排队)。信号的操作方式有:忽略信号、捕捉信号和系统默认动作。
消息是在内核地址空间的一个内部链表,每个队列都有唯一的标识号。创建消息队列时,内核创建、存储及维护着msqid_ds结构的一个实例。消息队列函数:msgget、msgctl、msgsnd、msgrcv。