第一篇: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] …………………………………………………………………………..
第二篇: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已存在!”);}
第三篇: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。
第四篇:电力电子课程设计报告书
课程设计说明书
课程名称: 电力电子技术课程设计 设计题目: 开关恒流电源设计 专
业: 电气工程及其自动化班级:电自1103班 学生姓名: 学生填写 学
号:(10位数)指导教师: 学生填写 年 月 日
1.引言
电力电子技术课程设计是电气、电子、机电及其相关专业教学中的一个重要组成部分。通过电力电子技术课程设计的训练,可以全面调动学生的主观能动性,融会贯通其所学的电路、电子技术、自动控制和电力电子技术等课程基本原理和基本分析方法,进一步把书本知识与工程实际需要相结合,实现知识向技能的转化。
在电路设计过程中,为了检验所设计的电路性能,必须搭建实际电路,以实验方式检验和联调电路,整体设计过程不仅研制时间长、而且人为因素较大,其设计质量取决于设计者准备工作是否充分,也取决于设计者的经验、技能、信心和耐心。了解、掌握和考核相关应用技术重点和难点就是学习和应用一些工程设计方法和技能,包括了以下几个方面:
(1)技术文献的应用,利用图书、论文和网络资源查找相关和相近的信息,整理和索取所需的资料和参数。
(2)至少掌握一种电路设计辅助软件,本课程设计只要求掌握altium desinger或protel99se,以及相类似电路设计辅助软件。
(3)掌握和使用PCB制板、电路制作工艺,本课程设计对PCB制板和电路制作工艺要求较高,也是课程设计是否成功和达标的关键。
(4)掌握基本测试仪器使用技能,本课程设计要求掌握的仪器有万用表、示波器等。
(5)掌握构建实验和测试条件的方法,课程设计当中往住是分步骤和分测试模块进行的,因此分布构建各步骤和测试模块,成为实验和测试的关键。
(6)掌握一种软件辅助设计软件,如multisim、proteus、matlab或saber等。
2.设计任务
(1)Buck Chopper开关电源设计,要求正确选择控制方案,查阅参考资料。(2)绘制电气控制原理图,包括主电路图,正确选择或设计元器件,订列元器件目录清单;
(3)设计部分工艺图纸(电气控制图,电器元件布置图,安装接线图);(4)编制完整的设计说明书。
3.设计要求
设计并制作如图1所示开关稳压电源。
开关稳压电源IINIOUIN隔离U1=220VAC变压器U2=18VAC整流滤波DC-DC变换器UORL
图1
Buck Chopper电源电路的原理分析,定量计算,学习和运用有关的辅助设计工具,进行相关的设计、制作、调试和测试。4.Buck Chopper电源电路设计
(1)Buck Chopper电源电路原理分析,定量计算。(2)具体设计要求
输入:交流90~130Vac。
输出:电源恒流350mA,工作电压范围40~60V。 开关电源的工作频率为20kHz左右。
采用脉冲宽度调制控制集成电路HV9910。
5.Buck Chopper工作原理
原理如图2和图3所示。
图2
图3(1)导通状态
IONUUOULt1It1LL
(2)截止状态
UUIOFFLt2Ot2LL
(3)输入输出关系
IONIOFFUOUIt1t1t2
ε称为占空比
6.HV9910介绍
HV9910 是 PWM 高效率LED驱动IC。它允许电压从 8VDC 一直到 450VDC而对HB LED有效控制。HV9910通过一个可升至 300 KHz的频率来控制外部的 MOSFET,该频率可用一个电阻调整。LED串是受到恒定电流的控制而不是电压, 如此可提供持续稳定的光输出和提高可靠度。输出电流调整范围可从MA级到1.0A。
HV9910 使用了一种高压隔离连接工艺,可经受高达 450V的浪涌输入电压的冲击。对一个LED串的输出电流能被编程设定在0和他的最大值之间的任何值,它由输入到HV9910的线性调光器的外部控制电压所控制。另外,HV9910也提供一个低频的PWM调光功能,能接受一个外部达几KHz的控制信号在0-100%的占空比下进行调光。
器件极限参数
Vin to GND......................................................................................-0.5V to +470V CS......................................................................................................-0.3V to 0.8V LD, PWM_D to GND.......................................................................-0.3V to(Vdd--0.3V)GATE to GND...................................................................................-0.3V to(Vdd + 0.3V)Continuous Power Dissipation(TA = +25°C)(Note 1)16-Pin SO(derate 7.5mW/°C above +25°C)................................750mW 8-Pin DIP(derate 9mW/°C above +25°C)....................................900mW 8-Pin SO(derate 6.3mW/°C above +25°C)...................................630mW Operating Temperature Range............................................................-40°C to +85°C Junction Temperature..........................................................................+125°C Storage Temperature Range................................................................-65°C to +150°C
封装信息 典型应用及工作原理
AC/DC 交流输入应用
HV9910 是一个低成本的可降压, 升压, 升降压的控制芯片特别适合设计驱动多串LED或LED阵列.该芯片既适用于全球通用的AC交流输入, 也适用于8-450V的直流输入.交流输入时, 为提高功率因素, 通过由EN 61000-3-2 Class C所规定的照明设备的交流谐波的限制,在输入功率小于25W, 可很容易的在线路中加入无源功率因素校正电路得以实现.HV9910可驱动上百个高亮度的LED串联或数串高亮度的LED, 这些LED能被设计成一串或串并联结合的方式, HV9910通过调节恒流值可确保LED亮度和光谱并延长寿命.HV9910的特色是使能脚PWM_D可采用脉宽调制(PWM)的方法调节LED亮度, 同时兼作使能端,该端悬空时芯片无输出控制。HV9910也可通过LD端线性调压的方式连续调节LED的输出电流从而控制亮度(也叫线性调光).HV9910内部包含了一个高压线性电源,它向内部所有线路提供能量,也可以提供给外部低压电路.LED 驱动控制
HV9910可控制包括隔离/非隔离, 连续/非连续等类所有的转换器.当GATE端输出高电平驱动外部的功率MOSFET时, LED驱动器将储存到电感或变压器原边电感的输入能量,依赖不同的转换器类型,可能储能和将部分能量直接传LED串,当功率MOSFET关断时, 储存在磁性元件上的能量转换为LED串的驱动电流.(工作在Flyback 模式).当 VDD电压大于UVLO时,GATE端可以输出高电平.此时输出电流通过限制外部功率MOSFET的峰值电流的方式工作.外部电流采样电阻与功率MOSFET的源 极 串 联 , 此采样电阻的电压反馈到HV9910的CS pin脚, 当CS pin脚的电压超过峰值电流的设 定的阈值电压时, GATE的驱动信号结束, 功率管关断.此峰值电流比较仪的阈值电压 在内部设定值为 250mV, 亦可通过LD pin在外部设定.当需要软启动时, 在LD pin连接一个电容,从而允许电压按期望的的速率上升, 因此,确保LED的输出电流是逐渐上升的.很明显,一个简单的无源功率因素校正电路, 由 3 二极管和 2 电容组成,应用线路显示如图1.供电电流
HV9910 需 要 1mA 的启动电流.如框图所示, 此电流由 HV9910的内部产生,无需象其它的电路中需加一个大的启动电阻.此外,在 HV9910的应用中,它能用内部的线性电源连续的向内部的所有线路提供7.5V的电压.设定输出电流
如图1, 选择降压拓扑时, LED中的平均电流是 CS 的峰值电压的一个好的表现.然而,运用这种电流采样方法,有一个相关连的误差需要被计算进去
.此误差的提出是因为电感中的平均电流和峰值电流是不同的.例如电感纹波电流的峰峰值是150mA,要得到500mA的LED电流, 该采样电阻应为 : 250mV/(500mA+ 0.5*150mA)= 0.43Ω.调光
有两种方式可以实现调光,取决不同的应用,可以单独调节也可组合调节.LED 的输出电流能被控制, 也能被线性调节改变, 或通过控制电流的开关来维持电流的不变.第二种调光方式(叫PWM 调光)通过改变输出电流的占空比来控制LED的亮度.线性调光通过调节LD pin脚电压从0到250mV而实现,该控制电压优先于内部CS pin设定值250mV , 从而可输出电流实现编程.例如, 在 VDD和地之间接一个分压器,设定CS pin 的控制电压.当分压器设定的控制电压超过250mV将不会改变输出电流.如希望更大的输出电流, 可以选择一个更小的采样电阻.PWM 调光通过外部PWM信号加在PWM_D pin 端而实现.该PWM 信号可由微控制器或由脉冲发生器按希望的LED的亮度以一定的占空比来实现.在此PWM 方式下, 以该信号的有效和失效转换来调节LED的电流.在此模式,LED的电流处在这两种状态之一: 零或由采样电阻设定的正常电流.它不可能用这个方法去达到比HV9910用采样电阻设定的水平更高的平均亮度.HV9910 用 这 种 PWM控制方法,这灯的输出只能在零到100%之间调整.此PWM调光方法的精度仅仅取决于GATE的最小脉宽的限制, 即此频率的占空比的百分比.这里有一些由应用线路图1,给出的典型的波形阐明PWM 调光方法如下.CH1是指MOSFET的漏极电压, CH2是给PWM_D脚的PWM 信号和CH4是LED灯串的电流.工作频率设定
振荡器的工作频率能被用一个外部电阻ROSC在25kHz到300 kHz之间设定: FOSC =25000/(ROSC [kΩ] + 22)[kHz] 功率因数校正LED驱动器的输入功率不超过25W时, 为了通过标准EN61000-3-2 Class C 的AC谐波的限制, 如 HV9910 的应用线路图1, 可以加一个简单的被动功率因数校正电路.这个典型的应用电路线图表示怎样加这个线路而不影响电路的其它部分.一个由3个二极管和 2个电容器的简单电路被加在ac整流输入的后面去改善输入电流的谐波失真和达到功率因数大于 0.85.电感设计
提及典型的应用电路 ,可以从电感中计算得到希望的 LED波纹电流的峰峰值.但在典 型的应用,这样的波纹电流被选取为正常的LED电流的30%.在这个例子中正常电流ILED是350mA.下一步是得出
LED灯串上的总电压降.例如, 当灯串由10高亮度 的LED组成每个二极管在它的额定电流的正向压降为3.0V;则LED串的总电压VLEDS是30V.可以知道正常的整流后的输入电流Vin=120V*1.41=169V,由此可以决定开关的占空比:D=VLED/VIN=30/169=0.177.然后,给出开关频率,fOSC =50KHz,这样需要计算功率管MOSFET的导通时间:TON=D/FOSC =3.5微秒由此这些必需的值,可以计算出电感: L=(VIN-VLEDS)*TCN/(0.3*ILED)= 4.6 mH
输入大电容
输入滤波电容应该设计在能保持整个AC线电压周期被整流后的电压高于LED串电压的两倍。假定15%的相关电压的纹波穿过电容器,一个简单的公式能给出此输入大电容器的最小值:CMIN=ILED*VLEDS*0.06/VIN^2
CMIN=22UF,这里选用22UF/250V.在被动的PFC电路中需要在输入端使用两个容值为计算出的CMIN的电容串联。这两个电容中的每一个应为输入电压的1/2和容量的两倍
使能控制
HV9910能被关断当PWM_D pin连接到地,此时,HV9910所消耗的静态电流小于1mA 7.参数设计
电容的参数:
C1=22UF C2=0.01UF
C3=0.1F
电感的参数: L1=3.3mH 电阻的参数:
R11=100K Ω
R2=0.62 Ω R13=15K Ω R14=15K Ω
8.原理图设计
9.PCB设计
10.波形测试
11.总结
(要求:说明你通过这几天学习和实践学到什么基本技能,另外说明你对这此课程设计真实感言)
×××××××××(小4号宋体,20磅行距)×××××××××××××××××××××××××
注:1.正文中表格与插图的字体一律用5号宋体;
2.正文各页的格式请以此页为标准复制。
第五篇:太原理工大学课程设计报告书
太原理工大学课程设计报告书
一、需求分析
(一)建设工厂物资管理数据库目的(包括服务对象、数据库的目标等)
(二)开展工厂物资管理数据库的可行性分析
(三)数据和处理分析(包括数据库中需呀存储哪些数据、如何进行处理等)
二、概念结构设计
(一)实体及其属性
(二)分E-R图设计
(三)E-R图集成与优化(消除不必要的冗余和冲突)
三、逻辑结构设计
(一)E-R图转换为关系模型
(二)数据模型的优化(这一部分就是将关系模型规范到3NF)
(三)设计用户子模式(这一部分可以设计用户自定义的视图,参见教材p227)
四、数据库的实施与数据导入
(一)在SQL Server 2000或其他DBMS系统上实现数据库的设计
(二)基本表的建立
(三)视图的建立
(四)数据库安全的建立(包括用户的建立及权限的分配)
(五)数据的输入
五、数据库的应用
(一)数据查询
(二)数据增加
(三)数据删除
(四)数据修改