数据库设计的一般步骤及例子
图书信息管理java实现代码,图书信息管理java
图书信息管理与读者信息管理相似,共包括两部分,图书添加和图书查询与修改,图书信息添加要求正确输入图书的八项信息,并且ISBN编号唯一,实现过程中要将ISBN作为主键。下面看实现过程:
数据库中书籍:
添加书籍过程:
数据库内容增加:
图书的查询与修改:查询过程可以根据不同的条件查询,如ISBN,作者,出版社,图书名称等,默认将所有图书全部显示在列表中,输入查询条件后再表格中显示查询结果。
本模块用到标签面板,可以很方便的查询所需要的信息。修改过程输入ISBN编号后按回车键将在下方显示所有的图书信息,然后修改图书信息后所有内容就会更新。
图书查询:
图书信息修改:
添加图书源代码如下:AddBook.java
package pdsu.bbm.view;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import pdsu.bbm.dao.BookDao;
import pdsu.bbm.dao.BookTypeDao;
import pdsu.bbm.model.Book;
import pdsu.bbm.model.BookType;
public class AddBook extends JFrame implements ActionListener {
private JPanel contentPane;
private JLabel label_1;
private JLabel lbll;
private JLabel label_2;
private JLabel label_3;
private JLabel label_4;
private JLabel label_5;
JPanel centerpPanel;
JButton button1, button2, button3;
private JComboBox comboBox_1;
Image icon = new ImageIcon("image/icon.png").getImage();
private JTextField ISBNfiled;
private JTextField publishField;
private JTextField publishDateField;
private JTextField publishTime;
private JTextField unitPriceField;
private JTextField bookNameField;
private JTextField authorFiled;
public static void main(String[] args) {
new AddBook();
}
public AddBook() {
setTitle("添加图书信息");
setSize(555, 333);
setIconImage(icon);
setLocationRelativeTo(null);
setTitle("添加图书信息");
setSize(555, 334);
setLocationRelativeTo(null);
setVisible(true);
centerpPanel = new JPanel();
centerpPanel.setLayout(null);
JLabel label1 = new JLabel("ISBN:");
label1.setFont(new Font("宋体", Font.PLAIN, 20));
label1.setBounds(71, 26, 95, 42);
centerpPanel.add(label1);
ISBNfiled = new JTextField();
ISBNfiled.setBounds(120, 30, 110, 30);
centerpPanel.add(ISBNfiled);
ISBNfiled.setColumns(10);
JLabel label = new JLabel("类 别:");
label.setFont(new Font("宋体", Font.PLAIN, 20));
label.setBounds(306, 30, 116, 35);
centerpPanel.add(label);
label_1 = new JLabel("书 名:");
label_1.setFont(new Font("宋体", Font.PLAIN, 20));
label_1.setBounds(50, 75, 154, 50);
centerpPanel.add(label_1);
lbll = new JLabel("作 者:");
lbll.setFont(new Font("宋体", Font.PLAIN, 20));
lbll.setBounds(306, 75, 137, 50);
centerpPanel.add(lbll);
label_2 = new JLabel("出版社:");
label_2.setFont(new Font("宋体", Font.PLAIN, 20));
label_2.setBounds(50, 130, 154, 50);
centerpPanel.add(label_2);
label_3 = new JLabel("出版日期:");
label_3.setFont(new Font("宋体", Font.PLAIN, 20));
label_3.setBounds(285, 135, 137, 50);
centerpPanel.add(label_3);
publishField = new JTextField();
publishField.setColumns(10);
publishField.setBounds(120, 143, 110, 30);
centerpPanel.add(publishField);
publishDateField = new JTextField();
publishDateField.setColumns(10);
publishDateField.setBounds(380, 143, 120, 30);
centerpPanel.add(publishDateField);
label_4 = new JLabel("印刷次数:");
label_4.setFont(new Font("宋体", Font.PLAIN, 20));
label_4.setBounds(28, 190, 154, 50);
centerpPanel.add(label_4);
publishTime = new JTextField();
publishTime.setColumns(10);
publishTime.setBounds(120, 203, 110, 30);
centerpPanel.add(publishTime);
label_5 = new JLabel("单 价:");
label_5.setFont(new Font("宋体", Font.PLAIN, 20));
label_5.setBounds(305, 194, 84, 42);
centerpPanel.add(label_5);
unitPriceField = new JTextField();
unitPriceField.setColumns(10);
unitPriceField.setBounds(380, 203, 120, 30);
centerpPanel.add(unitPriceField);
getContentPane().add(centerpPanel, BorderLayout.CENTER);
bookNameField = new JTextField();
bookNameField.setColumns(10);
bookNameField.setBounds(120, 86, 110, 30);
centerpPanel.add(bookNameField);
authorFiled = new JTextField();
authorFiled.setColumns(10);
authorFiled.setBounds(380, 86, 120, 30);
centerpPanel.add(authorFiled);
List<BookType> rs = BookTypeDao.selectBookType();
Iterator<BookType> iterator = rs.iterator();
String[] AllTypeName = new String[rs.size()];
int i = 0;
while (iterator.hasNext()) {
String typename = iterator.next().getTypename();
AllTypeName[i] = typename;
i++;
}
comboBox_1 = new JComboBox(AllTypeName);
comboBox_1.setBounds(380, 30, 120, 30);
comboBox_1.setFont(new Font("宋体", Font.PLAIN, 16));
centerpPanel.add(comboBox_1);
ButtonGroup group = new ButtonGroup();
JPanel panel2 = new JPanel();
panel2.setLayout(new FlowLayout());
button1 = new JButton("添加");
button1.setFont(new Font("宋体", Font.PLAIN, 20));
button2 = new JButton("关闭");
button2.setFont(new Font("宋体", Font.PLAIN, 20));
button3 = new JButton("重置");
button3.setFont(new Font("宋体", Font.PLAIN, 20));
panel2.add(button1);
panel2.add(button3);
panel2.add(button2);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
getContentPane().add(panel2, BorderLayout.SOUTH);
setVisible(true);
}
@SuppressWarnings("unused")
public void actionPerformed(ActionEvent e) {
if (e.getSource() == button1) {
String Isbn = ISBNfiled.getText().toString();
String bookname = bookNameField.getText();
String author = authorFiled.getText();
String selectType = comboBox_1.getSelectedItem().toString();
String publish = publishField.getText();
String publishdate = publishDateField.getText();
String time = publishTime.getText().trim();
String price = unitPriceField.getText().trim();
if (Isbn.equals("") || bookname.equals("") || author.equals("")
|| selectType.equals("") || publish.equals("")
|| publishdate.equals("") || time.equals("")
|| price.equals("")) {
JOptionPane.showMessageDialog(this, "请输入完整信息");
return;
} else {
BookType bt = new BookType();
Book book = new Book();
book.setISBN(Isbn);
book.setBookname(bookname);
book.setAuthor(author);
bt.setTypename(selectType);
int m = 0;
List<BookType> list = BookTypeDao
.selectIdByTypename(selectType);
Iterator<BookType> ite = list.iterator();
while (ite.hasNext()) {
m = ite.next().getId();
}
book.setTypeid(m + "");
book.setPublish(publish);
try {
book.setPublishtime(Integer.parseInt(time));
book.setUnitprice(Integer.parseInt(price));
} catch (NumberFormatException e1) {
e1.printStackTrace();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date regDate = null;
try {
regDate =sdf.parse(publishdate);
} catch (ParseException e1) {
JOptionPane.showMessageDialog(this, "请输入正确的日期");
publishDateField.setText("");
}
book.setPublishdate(regDate);
if(regDate==null) return;
if (BookDao.selectBookByISBN(Isbn) != null) {
JOptionPane.showMessageDialog(this, "该ISBN编号已存在");
return;
} else if (BookDao.insertBook(book) != 0) {
JOptionPane.showMessageDialog(this, "添加成功");
} else
JOptionPane.showMessageDialog(this, "添加失败");
}
}
if (e.getSource() == button3) {
ISBNfiled.setText("");
bookNameField.setText("");
authorFiled.setText("");
publishField.setText("");
publishDateField.setText("");
publishTime.setText("");
unitPriceField.setText("");
}
if (e.getSource() == button2) {
dispose();
new MainWindow();
}
}
}
图书查询与修改源代码:BookSelectandModify.java
package pdsu.bbm.view;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTabbedPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import javax.swing.table.TableModel;
import pdsu.bbm.dao.BookDao;
import pdsu.bbm.dao.BookTypeDao;
import pdsu.bbm.model.Book;
import pdsu.bbm.model.BookType;
public class BookSelectandModify extends JFrame implements ActionListener {
// 设置序列号
private static final long serialVersionUID = 1L;
private JTabbedPane jtabbedPane; // 标签面板
// selectJP查询面板 select_conditionJP下拉列表面板 select_resultJP结果按钮面板updateJP修改面板
// updateJP修改面板,bookJP中间面板 buttonJP2按钮面板
private JPanel selectJP, select_conditionJP, select_resultJP, buttonJP1,
bookJP, updateJP, buttonJP2;//
private JTextField selectJTF, ISBNJTF, booknameJTF, authorJTF,
printtimeJTF, publishJTF, publishdateJTF, unitpriceJTF;
private JLabel ISBNJL, booknameJL, authorJL, categoryJL, printtimeJL,
publishJL, publishdateJL, unitpriceJL;
// 重点!
private JTable jtable;// 定义表格
private JComboBox choiceJCB, booktypeJCB;
private JScrollPane jscrollPane;
private JButton selectJB, exitJB, updateJB, resetJB;// 查询按钮,退出按钮,修改按钮,关闭按钮
private TableModel getSelect;
private String[] title = { "ISBN", "图书序列", "图书名称", "作者", " 出版社 ",
"出版日期", "印刷次数", "单价" };
Image icon = new ImageIcon("image/icon.png").getImage();
public BookSelectandModify() {
super();
setIconImage(icon);
setTitle("图书查询与修改");
setBounds(100, 100, 555, 400);
setLocationRelativeTo(null);
// JTabbedPane选项卡
jtabbedPane = new JTabbedPane();
add(jtabbedPane);
selectJP = new JPanel();
selectJP.setLayout(new BorderLayout());
jtabbedPane.add("图书信息查询", selectJP);
// 查询条件面板
select_conditionJP = new JPanel();
choiceJCB = new JComboBox();
String array[] = { "ISBN", "图书名称", "图书序列", "作者", "出版社","所有" };// 设置为一维数组
for (int i = 0; i < array.length; i++) {
choiceJCB.addItem(array[i]);
}
select_conditionJP.add(choiceJCB);
selectJTF = new JTextField(20);
select_conditionJP.add(selectJTF);
selectJP.add(select_conditionJP, BorderLayout.NORTH);
// 查询结果面板
select_resultJP = new JPanel();
BookDao dao = new BookDao();
List<Book> list = dao.selectBook();
jtable = new JTable(getSelect(list), title);
// !设置表格大小不变
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
// !设置列宽
jtable.getColumnModel().getColumn(4).setPreferredWidth(175);
jscrollPane = new JScrollPane(jtable);// 把表格加入滚动面板
// 显示滚动面板边框
jscrollPane.setPreferredSize(new Dimension(450, 170));
select_resultJP.add(jscrollPane);
selectJP.add(select_resultJP, BorderLayout.CENTER);
// 查询按钮面板
buttonJP1 = new JPanel();
selectJB = new JButton("查询");
selectJB.setFont(new Font("宋体", Font.PLAIN, 20));
selectJB.addActionListener(this);
buttonJP1.add(selectJB);
exitJB = new JButton("退出");
exitJB.setFont(new Font("宋体", Font.PLAIN, 20));
exitJB.addActionListener(this);
buttonJP1.add(exitJB);
selectJP.add(buttonJP1, BorderLayout.SOUTH);
// 信息修改页面
updateJP = new JPanel();
updateJP.setLayout(new BorderLayout());
jtabbedPane.addTab("图书信息修改", updateJP);
bookJP = new JPanel();
final GridLayout gridLayout = new GridLayout(8, 2);
// 设置边框间的距离
gridLayout.setVgap(8);
gridLayout.setHgap(8);
bookJP.setLayout(gridLayout);
ISBNJL = new JLabel("ISBN:");
ISBNJL.setFont(new Font("宋体",Font.PLAIN,20));
ISBNJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(ISBNJL);
ISBNJTF = new JTextField(20);
ISBNJTF.addActionListener(this);
bookJP.add(ISBNJTF);
categoryJL = new JLabel("类 别:");
categoryJL.setFont(new Font("宋体",Font.PLAIN,20));
categoryJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(categoryJL);
// 下拉列表
List<BookType> list1 = BookTypeDao.selectBookType();
Iterator<BookType> it = list1.iterator();
String ty[] = new String[list1.size()];
int i = 0;
booktypeJCB = new JComboBox();
while (it.hasNext()) {
ty[i] = it.next().getTypename();
booktypeJCB.addItem(ty[i]);
i++;
}
bookJP.add(booktypeJCB);
booknameJL = new JLabel("书 名:");
booknameJL.setFont(new Font("宋体",Font.PLAIN,20));
booknameJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(booknameJL);
booknameJTF = new JTextField();
booknameJTF.setColumns(20);
bookJP.add(booknameJTF);
authorJL = new JLabel("作 者:");
authorJL.setFont(new Font("宋体",Font.PLAIN,20));
authorJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(authorJL);
authorJTF = new JTextField();
authorJTF.setColumns(20);
bookJP.add(authorJTF);
publishJL = new JLabel("出版社:");
publishJL.setFont(new Font("宋体",Font.PLAIN,20));
publishJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(publishJL);
publishJTF = new JTextField();
bookJP.add(publishJTF);
publishdateJL = new JLabel("出版日期:");
publishdateJL.setFont(new Font("宋体",Font.PLAIN,20));
publishdateJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(publishdateJL);
publishdateJTF = new JTextField();
publishdateJTF.setHorizontalAlignment(SwingConstants.LEFT);
bookJP.add(publishdateJTF);
printtimeJL = new JLabel("印刷次数:");
printtimeJL.setFont(new Font("宋体",Font.PLAIN,20));
printtimeJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(printtimeJL);
printtimeJTF = new JTextField();
bookJP.add(printtimeJTF);
unitpriceJL = new JLabel("单 价:");
unitpriceJL.setFont(new Font("宋体",Font.PLAIN,20));
unitpriceJL.setHorizontalAlignment(SwingConstants.CENTER);
bookJP.add(unitpriceJL);
unitpriceJTF = new JTextField();
bookJP.add(unitpriceJTF);
// 按钮面板
// 按钮面板设计
buttonJP2 = new JPanel();
updateJB = new JButton("修改");
updateJB.setFont(new Font("宋体", Font.PLAIN, 20));
updateJB.addActionListener(this);
resetJB = new JButton("关闭");
resetJB.setFont(new Font("宋体", Font.PLAIN, 20));
resetJB.addActionListener(this);
buttonJP2.add(updateJB);
buttonJP2.add(resetJB);
updateJP.add(bookJP, BorderLayout.CENTER);
updateJP.add(buttonJP2, BorderLayout.SOUTH);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
// 将查询表格加入面板
private Object[][] getSelect(List<Book> list) {
// TODO Auto-generated method stub
Object[][] objects = new Object[list.size()][title.length];
for (int i = 0; i < list.size(); i++) {
Book book = list.get(i);
objects[i][0] = book.getISBN();
objects[i][1] = book.getTypeid();// 图书序列
objects[i][2] = book.getBookname();// 图书名称
objects[i][3] = book.getAuthor();// 图书作者
objects[i][4] = book.getPublish();// 出版社
objects[i][5] = book.getPublishdate();// 出版日期
objects[i][6] = book.getPublishtime();// 印刷次数
objects[i][7] = book.getUnitprice();// 单价
}
return objects;
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource()==ISBNJTF){
String isbn=ISBNJTF.getText();
String typename=null;
String id=BookDao.selectBookByISBN(isbn).getTypeid();
typename=BookTypeDao.selectById(id);
System.out.println(typename);
booktypeJCB.setSelectedItem(typename);
booknameJTF.setText(BookDao.selectBookByISBN(isbn).getBookname());
authorJTF.setText(BookDao.selectBookByISBN(isbn).getAuthor());
publishJTF.setText(BookDao.selectBookByISBN(isbn).getPublish());
publishdateJTF.setText(BookDao.selectBookByISBN(isbn).getPublishdate()+"");
printtimeJTF.setText(BookDao.selectBookByISBN(isbn).getPublishtime()+"");
unitpriceJTF.setText(BookDao.selectBookByISBN(isbn).getUnitprice()+"");
}
if (e.getSource() == selectJB) {// 按照ISBN编码查找
int r = choiceJCB.getSelectedIndex();
if (r == 0) {
String name = selectJTF.getText().trim();
// 强制转换为线性表类型
List<Book> list = new ArrayList<Book>();
Book book = BookDao.selectBookByISBN(name);
if (book == null) {
JOptionPane.showMessageDialog(this, "该编码不存在!");
} else {
list.add(book);
Object[][] data = getSelect(list);
jtable = new JTable(data, title);
jtable.getColumnModel().getColumn(4).setPreferredWidth(175);
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jscrollPane.setViewportView(jtable);
}
}
if (r == 1) {// 根据图书名称查询信息
String name = selectJTF.getText().toString();
List<Book> list = BookDao.selectBookByName(name);
// 判断线性表是否为空
if (list == null || list.size() == 0) {
JOptionPane.showMessageDialog(this, "该图书不存在!");
} else {
Object[][] data = getSelect(list);
jtable = new JTable(data, title);
tianjia();
}
}
if (r == 2) {// 根据图书序列查询信息
String name = selectJTF.getText().toString();
List<Book> list = BookDao.selectBookByType(name);
// 判断线性表是否为空
if (list == null || list.size() == 0) {
JOptionPane.showMessageDialog(this, "该图书不存在!");
} else {
Object[][] data = getSelect(list);
jtable = new JTable(data, title);
tianjia();
}
}
if (r == 3) { // 根据作者进行查找
String name = selectJTF.getText().toString();
// 根据作者进行查找
List<Book> list = BookDao.selectBookByAuthor(name);
// 判断线性表是否为空
if (list == null || list.size() == 0) {
JOptionPane.showMessageDialog(this, "该图书不存在!");
} else {
Object[][] data = getSelect(list);
jtable = new JTable(data, title);
tianjia();
}
}
if (r == 4) {// 根据出版社进行查找
String name = selectJTF.getText().toString();
List<Book> list = BookDao.selectBookByPublish(name);
if (list == null || list.size() == 0) {
JOptionPane.showMessageDialog(this, "该图书不存在!");
} else {
Object[][] data = getSelect(list);
jtable = new JTable(data, title);
tianjia();
}
}
if(r==5){
List<Book> list =BookDao.selectBook();
}
}
if (e.getSource() == updateJB) {
String ISBN = ISBNJTF.getText().trim();
String typename = ((String) booktypeJCB.getSelectedItem()).trim();
String id = BookTypeDao.selectByTypename(typename);
String bookname = booknameJTF.getText();
String author = authorJTF.getText();
String publish = publishJTF.getText();
String publishdate = publishdateJTF.getText();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date regDate = null;
try {
regDate = sdf.parse(publishdate);
} catch (Exception e2) {
e2.printStackTrace();
JOptionPane.showMessageDialog(this, "请输入正确的日期格式!");
}
if (regDate == null)
return;
int publishtime = Integer.parseInt(printtimeJTF.getText());
int unitprice = Integer.parseInt(unitpriceJTF.getText());
// 封装对象
Book book = new Book();
book.setISBN(ISBN);
book.setTypeid(id);
book.setBookname(bookname);
book.setAuthor(author);
book.setPublish(publish);
book.setPublishdate(regDate);
book.setPublishtime(publishtime);
book.setUnitprice(unitprice);
book.setTypename(typename);
int result = BookDao.update(book);
List<Book> list2 = new ArrayList<Book>();
list2.add(book);
// System.out.println(list2);
if (result == 1) {
JOptionPane.showMessageDialog(this, "修改成功!");
BookDao bk=new BookDao();
List<Book> list =bk.selectBook();
jtable =new JTable(getSelect(list),title);
tianjia();
} else {
JOptionPane.showMessageDialog(this, "修改失败!");
}
}
if (e.getSource() == resetJB) {
dispose();
new MainWindow();
}
if (e.getSource() == exitJB) {
dispose();
new MainWindow();
}
}
private void tianjia() {
jtable.getColumnModel().getColumn(4).setPreferredWidth(175);
jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
jscrollPane.setViewportView(jtable);
}
public static void main(String[] args) {
new BookSelectandModify();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持帮客之家。
http://www.bkjia.com/Javabc/1296187.htmlwww.bkjia.comtruehttp://www.bkjia.com/Javabc/1296187.htmlTechArticle图书信息管理java实现代码,图书信息管理java 图书信息管理与读者信息管理相似,共包括两部分,图书添加和图书查询与修改,图书信息添...
数据库设计的一般步骤及例子
一、数据库设计的一般流程
1.概述
包括课程设计选题、项目背景、课程设计报告编写目的、课程设计报告的组织等内容。
2.课程设计任务的需求分析
2.1设计任务
2.2设计要求
2.3需求描述的规范文档
3.概念结构设计
3.1概念结构设计工具(E-R模型)
3.2XXX子系统(局部)
3.2.1子系统描述
3.2.2分E-R图
3.2.3说明
3.3YYY子系统
3.3.1子系统描述
3.3.2 分E-R图
3.3.3 说明
……
3.X 总体E-R图
3.X.1 E-R图的集成
3.X.2 总体E-R图
4.逻辑结构设计
4.1关系数据模式
4.2视图的设计
4.3优化
5.数据库物理设计与实施
5.1数据库应用的硬件、软件环境介绍
5.2物理结构设计
5.3 索引的设计
5.4建立数据库
5.5 加载数据库测试数据
6.数据操作要求及实现
6.1数据查询操作
6.2数据更新操作
6.3数据维护操作
6.4其他
7.数据库应用系统的实现
8.设计心得体会
9.参考文献
二、例子:学生选课管理系统
在高校教学管理系统中,学生选课管理是很重要的功能模块。
需求分析:
该系统应该能管理学校的教师信息、学生信息、专业信息、学校开设的所有课程信息、学生选修课程的信息等。选课系统主要满足三类用户的要求,这三类用户分别是教务处的系统管理员、教师和学生。他们所具有的操作权限以及操作内容是不同的。具体的需求分析如下:
系统管理员
- 维护学生的个人基本信息,实现对学生个人信息的增、删、改等。
学生信息包括…
- 维护教师的个人基本信息,实现对教师个人信息的增、删、改等。
教师信息包括…
- 维护课程的个人基本信息,实现对课程个人信息的增、删、改等。
课程信息包括…
学生用户
- 查询和修改个人信息。
- 进行选课操作
- 学生可以查看自己所选课程信息及以前所选课程的成绩信息。
教师用户
- 查询和修改个人信息
- 课程结束后,登记成绩
- 教师可查看自己的教学安排。
数据库概念结构设计:
概念结构设计的常用工具是ER图。分下面几步完成。
- 数据抽象(抽象出实体)。画出各实体属性图。
- 设计分ER图。找出实体及其联系,并画出分ER图。
- 合并分ER图,生成初步ER图。
- 全局ER图。将各个实体的属性加入初步ER图,消除各局部可能存在的冲突(包括属性冲突、命名冲突和结构冲突),形成全局ER图。
数据库逻辑结构设计:
首先,将概念模型ER图中实体和联系转换为数据模型,在RDBMS中,就是转换为关系模式,并确定关系模式的属性和主码。
ER图向关系数据模型转换的基本规则如下:
- 一个实体转换为一个关系模式,实体的属性就是关系的属性,实体的键就是关系的键。
- 若实体间的联系是1:1的,则联系不单独转换为关系模式,需在两个实体对应的关系模式中的任意一个中加入另一个关系模式的键和联系的属性。
- 若实体间的联系是1:n的,则联系不单独转换为关系模式,需在n端实体对应的关系模式中加入1端实体对应的关系模式的键和联系的属性。
- 若实体间的联系是m:n的,则将联系也转换成关系模式,其属性为两端实体类型的码加上和联系的属性,而联系的键为两端实体码的组合。
其次,对具有相同主码的关系模式进行必要的合并。
关系优化
以规范化理论为指导,对关系数据模型进行优化。规范化到第三范式。
数据库物理设计与实施:
主要包括以下工作:
- 创建数据库
- 创建基本表,设置约束条件,管理基本表。
- 创建和管理索引。(DBMS会为主键自动建立索引。建立索引来提高查询效率。)
- 创建和管理视图。
- 向数据库中输入数据。
- 用SQL语句 实现对数据查询、修改、删除等操作。(可以先思考需要怎么操纵数据库,后面再实现)
- 编写存储过程、触发器等,并调试通过。(比如创建一个触发器当学生表中某学号的学生被删除时,自动将选课表中的该选课记录删除)
数据库运行维护:
主要包括以下内容
- 数据库的备份与恢复
- 数据库的安全性与完整性控制
- 数据库的性能监督、分析和改进
访问数据库,可以通过以下语句操纵数据。
- 对学生表的性别、年龄字段添加约束。
- 添加一个属性列“入学时间”。
- 修改“专业”的数据类型。
- 增加课程名必须取唯一值的约束。
- 在选课表的列“学号”、“课程号”上建立索引。
- 在选课表的“工号”、“课程号”上建立索引。
- 假设学生选课系统中有4个院系,为方便各个院系的教学管理人员查看本院系学生信息,每个院系分别建立一个学生视图。
- 建立一个反映学生选课情况的视图。
- 学生通过学号或姓名查询自己的选课信息。
- 学生通过学号或姓名查询自己的基本信息。
- 列出某个教师所授某门课程的成绩单,并按成绩升或降序显示。
- 列出某个教师所教授的所有课程信息。
- 查询某个学生已经获得的学分信息。
- 统计某个教师某门课的平均分、最高分、最低分。
- 添加一门新的课程。
- 修改某门课的学分。
- 创建删除触发器,当学生表中的某“学号”的学生被删除时,自动将选课表中的该学生的选课记录删除,即为学生表建立删除触发器,实现学生表和选课表的级联删除。
- 创建删除触发器,当课程表中的某“课程编号”的课程被删除时,自动将选课表中的选修该课程的记录都删除,即为课程表建立删除触发器,实现学生表和选课表的级联删除。
- 创建插入触发器,当往选课表中插入记录时,查询学生表中是否有该学号的学生,课程表中是否有该课程编号的课程,如果都有则可以插入,否则拒绝插入。
- 备份“学生选课系统”数据库到本地磁盘E盘下的BACKUPDB文件夹下面。
sp_addumpdevice 'disk','学生选课系统_bak','E:BACKUPDB学生选课系统_bak'
BACKUP DATABASE 学生选课系统TO DISK='学生选课系统_bak'
图书借阅管理系统
需求分析:
系统应实现以下功能:图书管理员可以维护图书信息,包括增加新书、修改图书信息、办理图书借阅登记、归还登记、过期图书处理、丢失图书处理以及读者借阅证件信息的维护等。而读者可以实现借书、还书、查询图书信息、借书信息等。具体要求如下:
- 图书信息管理:录入各图书信息、维护图书信息等。
- 读者信息管理:维护读者信息并根据实际情况需要修改、更新、删除读者
- 借阅管理:包括借书、还书、过期图书归还处理等。
图书借阅管理系统主要有2种用户。
- 管理员:维护图书基本数据,包括图书种类、更新图书信息,进行读者的图书借阅和归还处理等。
- 读者用户:可以查询图书信息、借阅图书。
语义:图书馆的图书情况和管理规定,每种类型图书有很多不同的图书,同样的书可以习多本;每本图书可以被多次借阅,每位读者可以借阅多本图书。每本图书的借阅期限是一个月。
数据库概念结构设计:
分3步完成:1)抽象出实体2)抽象出联系实际)确定实体的属性和键
图书类型,包括:图书分类号、图书分类名称、描述信息。
图书,包括:图书编号、图书名称、作者、出版社、价格。
读者,包括:证件号、姓名、性别、所在系、班级、证件状态(包括有效和失效)、联系方式等。
读者与图书之间是m:n,图书类型与图书之间是1:n,读者与图书类型之间无联系。
数据库逻辑结构设计:
将E-R图转换成关系模型。
对关系模型进行优化
规范化到第三范式
数据库物理设计与实施:
主要包括以下工作:
- 创建数据库
- 创建基本表,设置约束条件,管理基本表。
- 创建和管理索引。(DBMS会为主键自动建立索引。建立索引来提高查询效率。)
- 创建和管理视图。
- 向数据库中输入数据。
- 用SQL语句 实现对数据查询、修改、删除等操作。(可以先思考需要怎么操纵数据库,后面再实现)
- 编写存储过程、触发器等,并调试通过。
- 操纵数据库中的数据
- 为了方便管理员分类管理,现在需要为多种图书类类型的图书建立视图。
- 建立读者借阅情况表。
- 为借阅表中的证件号和借阅日期建立组合次索引。
- 为图书表中的图书分类号、书名、出版社字段分别建立索引。
- 为借阅表建立一个插入触发器,以保证向借阅表插入的“证件号”在读者表中存在,如果不存在,就不会向借阅表中插入借阅信息记录。
- 在借阅表建立一个更新触发器,监视借阅表的“借阅日期”列,使其不能手工修改。
- 在读者表建立删除触发器,实现读者表和借阅表的级联删除。
运动会管理系统
需求分析:
引入计算机管理运动会,运动员可以在运动会管理系统中查询自己的比赛项目及比赛结果,裁判员或工作人员可以通过系统记录运动员各个比赛项目的成绩、进行成绩统计等。运动会管理系统保存运动员、比赛项目以及不同类型比赛的参赛数据。
运动会管理系统主要管理对象有代表队、运动员、比赛项目等。
本系统中,基本规定如下:一个代表队包含多个运动员,一个运动员只能属于一个代表队;一个运动员可以参加多个比赛项目,一个比赛项目可以被多个运动员参加;假设各个比赛项目结束后,按照成绩由高到低排出名次,并对前3名的运动员给予相应的积分,如第1、2、3名分别积分为3、2、1分,而获得其他名次的运动员积分为零分,将代表队中所有成员的积分累加,得到各代表队总积分,将总积分由高到低排序,得到各个代表队的排名情况。
为简化系统需求,本运动会管理系统只考虑田径运动会的管理,仅考虑代表队、、比赛项目的关系,不考虑裁判评分、比赛时间、地点等到的安排。
数据库概念结构设计:
代表队:代表队员、队名称、领队、总积分、总名次
运动员:运动员号,姓名、性别、年龄
比赛项目:项目号、项目类别、项目名称、成绩单位。
数据库逻辑结构设计:
4张表,
比赛详情,包括成绩、积分、名次
本文DOC文件附件下载
数据库设计的一般步骤及例子
http://www.bkjia.com/Mysql/1293070.htmlwww.bkjia.comtruehttp://www.bkjia.com/Mysql/1293070.htmlTechArticle数据库设计的一般步骤及例子 一、数据库设计的一般流程 1.概述 包括课程设计选题、项目背景、课程设计报告编写目的、课程设计报告的...
本文由宝马娱乐在线城发布于互联网络,转载请注明出处:数据库设计的一般步骤及例子
关键词: