为您推荐:
精华内容
最热下载
问答
  • 547KB m0_52957036 2020-11-02 10:45:42
  • 3星
    1MB yxjing712113 2008-12-17 11:12:09
  • 20KB qq_36951931 2019-04-06 13:27:54
  • 学生选修课管理系统设计C语言版学生选修... TECHNOLOGY课程设计(论文)题目: 学生选修课管理系统设计学生姓名:江元学 号:201153100121班 级: 信息与计算科学11-01班所在院部: 数学与计算科学学院指导教师:龚红仿2...

    学生选修课管理系统设计C语言版

    学生选修课管理系统设计

    第 PAGE \* MERGEFORMAT 35页 共22页

    CHANGSHA UNIVERSITY OF SCIENCE & TECHNOLOGY

    课程设计(论文)

    题目: 学生选修课管理系统设计

    学生姓名:江元学 号:201153100121班 级: 信息与计算科学11-01班所在院部: 数学与计算科学学院指导教师:龚红仿

    2013 年 1 月

    学生选修课管理系统设计

    学生姓名:江元学 号:201153100121班 级:信计11-01班指导教师:龚红仿 完成日期: 2013年1月11日

    学生选修课管理系统设计

    摘要

    C语言课程设计和现代计算机技术的实际应用相结合,是我们在本阶段学完理论课程之后对自己该方面的能力的一次很好的检验,从开始的算法思路到运行调试后的美观的图形界面以及另人兴奋的可用程序,都是一个很好的学习和锻炼的过程。使我们巩固了原有的理论知识,培养了我们灵活运用和组合集成所学过知识及技能来分析、解决实际问题的能力。使我们体会到自身知识和能力能在实际中的应用和发挥。不但可以激发创新意识,还可以开发创造能力、培养沟通能力。这次学生选修课系统管理设计时间虽然仅有一个星期,但确实使我受益非浅。通过学生选修课系统管理设计我丰富了计算机操作经验,更加深了对C语言的了解,熟悉了其环境,更增强了对Microsoft Visual C++ 6.0的使用技巧。C语言是在国内外广泛使用的一种计算机语言 。语言功能丰富、表达能力强、使用灵活方便、既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件。同时,我觉得C语言应该是操作和理论相结合的课程,在不断地编写中去思考,两者是不可分割的。我们在编写一个较大的程序时应该把它分开成几个小程序来看,这样会容易得多。

    关键词:学生选修课系统管理;C语言课程设计;计算机技术;模块化程序设计;信息录入;浏览信息;选课;查询

    Students Elective Courses Management System Design

    ABSTRACT

    C language curriculum design and modern computer technology in the practical application of the combination, we are at this stage of learning theory course on their own side of the ability of a good test, from the beginning of the algorithm to run after the beautiful graphical interface and exciting available procedures, is a very good learning and training process. We consolidate the original theory of knowledge, cultivate our flexible application and integration of the knowledge learned and skills of analysis, ability to solve practical problem. So that we realize that their knowledge and ability in practical application and play. Can not only stimulate consciousness of innovation, also can develop creative ability, communication skills training. The student elective system management design time although only a week, but it does make me benefit. Students elective system management design my rich experience in computer operation, more deep understanding of the C language, familiar with the environment, more increased to Microso

    展开全文
    weixin_39517357 2021-05-23 09:16:34
  • 15KB qq_36881881 2018-06-19 19:45:23
  • 更新时间:2019年06月17日 10:59:04 作者:搬砖的小孩有肉吃这篇文章主要为你们详细介绍了C语言链表实现学生管理平台本文实例为你们分享了C语言链表实现学生管理平台的详细代码,供各位参考链表 c语言,具体内容如下...

    83d63573c65b6ee6648cc4f941b5bf5b.png

    更新时间:2019年06月17日 10:59:04 作者:搬砖的小孩有肉吃

    1a9e2bac5096da6a1a4b26498c4107cb.png

    这篇文章主要为你们详细介绍了C语言链表实现学生管理平台

    5ad29fb05bd3804617a812945eaab748.png

    本文实例为你们分享了C语言链表实现学生管理平台的详细代码,供各位参考链表 c语言,具体内容如下

    1810324793.png.jpg

    991b92ff0b58debc27f8b1a5413f87ad.png

    82610e6d295245ecd1f038118786ffea.gif

    #include

    #include

    #include

    #include

    #include

    #include

    using namespace std;

    typedef struct ndoe{

    char id[10];

    char name[10];

    char sex[3];

    char num[10];

    struct node *next;

    }student;

    struct Student{

    student data;

    struct Student *next;

    };

    /********创建**********/

    Student * insert(Student * head){

    Student * s,*r;

    head=(Student *)malloc(sizeof(Student));

    printf("请输入学生的个数:");

    int n;

    scanf("%d",&n);

    r=head;

    printf("按照“学号 姓名 性别(M or G) 手机号”的形式输入每个学生的信息\n");

    for(int i=0;i

    s=(Student *)malloc(sizeof(Student));

    /*scanf("%s",s->data.id);

    scanf("%s",s->data.name);

    scanf("%s",s->data.sex);

    scanf("%s",s->data.num);*/

    scanf("%s%s%s%s",s->data.id,s->data.name,s->data.sex,s->data.num);

    r->next=s;

    r=s;

    }

    r->next=NULL;

    printf("录入成功\n");

    return head;

    }

    /********增加学生************/

    void add(Student *head){

    Student *s;

    s=head->next;

    while(s->next!=NULL)

    s=s->next;

    Student *ad=(Student *)malloc(sizeof(Student));

    ad->next=NULL;

    s->next=ad;

    //printf("输入新学生的信息:\n");

    scanf("%s%s%s%s",ad->data.id,ad->data.name,ad->data.sex,ad->data.num);

    printf("添加成功\n");

    return ;

    }

    /*************修改********************/

    void change(Student * head){

    printf("输入1,按学号搜索学生,并修改改学生的信息\n");

    printf("输入2,按姓名搜索学生,并修改改学生的信息\n");

    Student * s;

    int n;

    scanf("%d",&n);

    switch(n){

    case 1:{

    printf("请输入学号:");

    char number[10];

    scanf("%s",number);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.id,number)==0){

    printf("请输入要修改的信息:");

    char phone[10];

    scanf("%s",phone);

    strcpy(s->data.num,phone);

    printf("修改成功\n");

    break;

    }

    s=s->next;

    }

    break;

    }

    case 2:{

    printf("请输入姓名:");

    char nam[10];

    scanf("%s",&nam);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.name,nam)==0){

    printf("请输入要修改的信息:");

    char phone[10];

    scanf("%s",phone);

    strcpy(s->data.num,phone);

    printf("修改成功\n");

    break;

    }

    s=s->next;

    }

    break;

    }

    }

    return ;

    }

    /**********删除******************/

    void del(Student * head){

    printf("输入1,按学号搜索学生,并删除该学生的信息\n");

    printf("输入2,按姓名搜索学生,并删除该学生的信息\n");

    Student * s,*r;

    int n;

    scanf("%d",&n);

    switch(n){

    case 1:{

    printf("请输入学号:");

    char number[10];

    scanf("%s",number);

    s=head->next;

    r=head;

    while(s!=NULL){

    if(strcmp(s->data.id,number)==0){

    r->next=s->next;

    free(s);

    printf("删除成功\n");

    break;

    }

    r=s;

    s=s->next;

    }

    break;

    }

    case 2:{

    printf("请输入姓名:");

    char nam[10];

    scanf("%s",&nam);

    s=head->next;

    r=head;

    while(s!=NULL){

    if(strcmp(s->data.name,nam)==0){

    r->next=s->next;

    free(s);

    printf("删除成功\n");

    break;

    }

    r=s;

    s=s->next;

    }

    break;

    }

    }

    return ;

    }

    /**********查询学生的信息**********************/

    void check(Student * head){

    printf("输入1,按学号搜索学生,并展示该学生的信息\n");

    printf("输入2,按姓名搜索学生,并展示该学生的信息\n");

    Student * s,r;

    int n;

    scanf("%d",&n);

    switch(n){

    case 1:{

    printf("请输入学号:");

    char number[10];

    scanf("%s",number);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.id,number)==0){

    printf("%s %s %s %s\n",s->data.id,s->data.name,s->data.sex,s->data.num);

    break;

    }

    s=s->next;

    }

    break;

    }

    case 2:{

    printf("请输入姓名:");

    char nam[10];

    scanf("%s",&nam);

    s=head->next;

    while(s!=NULL){

    if(strcmp(s->data.name,nam)==0){

    printf("%s %s %s %s\n",s->data.id,s->data.name,s->data.sex,s->data.num);

    break;

    }

    s=s->next;

    }

    break;

    }

    }

    if(s==NULL)

    printf("该学生不存在\n");

    return ;

    }

    int main(){

    Student *head=NULL;

    Student *a;

    printf("***欢迎进入学生管理系统***\n");

    printf("***1:请录入***\n");

    printf("***2:请修改***\n");

    printf("***3:请删除***\n");

    printf("***4:请查询***\n");

    printf("***5:请添加新**\n");

    printf("***6: 退出管理系统 ***\n");

    printf("*************************\n");

    printf("请输入命令:");

    int n;

    while(scanf("%d",&n)&&n!=6){

    switch(n){

    case 1:{

    printf("请录入:\n");

    head=insert(a);

    break;

    }

    case 2:{

    printf("请改:\n");

    change(head);

    break;

    }

    case 3:{

    cout<

    del(head);

    break;

    }

    case 4:{

    cout<

    check(head);

    break;

    }

    case 5:{

    cout<

    add(head);

    break;

    }

    default :

    break;

    }

    printf("请继续输入命令:");

    }

    Student *s,*r;

    s=head->next;

    while(s!=NULL){

    r=s->next;

    free(s);

    s=r;

    }

    free(head);

    return 0;

    }

    以上就是本文的全部内容,希望对你们的学习有所帮助,也期望大家多多支持脚本之家。

    本文来自电脑杂谈,转载请注明本文网址:

    http://www.pc-fly.com/a/jisuanjixue/article-144029-1.html

    展开全文
    weixin_42501949 2021-05-22 13:34:50
  • 4星
    37KB xjnalzn 2009-02-16 10:09:33
  • 学生选课信息管理系统管理端 面向对象程序设计——课程设计(c++) 必须使用vs,因为dev c++会报错。 程序详情见下面代码块或访问https://download.csdn.net/download/zhanjuex/12733258 一、项目名称:学生选课信息...

    学生选课管理系统——学生选课信息管理系统管理端

    面向对象程序设计——课程设计(c++)

    代码已开源,需要的自取。

    ps: 编程环境为vs,使用dev c++会报错。

    一、项目名称:学生选课信息管理系统管理端

    二、项目功能

    (一)实现课程信息打印、查询、录入、删除、修改功能。
    (二)实现学生信息打印、查询、录入、删除、修改功能。
    (三)课程信息、学生信息交互,实现选课管理端根据学生已有学分进行选课。(包括帮助学生选课或删除学生已选课)
    (四)管理端系统设置。仿真加密系统,实现密码防护、修改密码、注销功能。其中密码防护功能实现用户多次输入密码错误,系统将进入休眠状态,等待一段时间后用户才能重新输入密码,防止用户恶意登录。
    (五)菜单功能选择,保证用户正常使用系统。
    (六)各菜单界面交互,提升系统流畅度,用户使用效率及营造良好用户体验环境。
    (七)vector容器动态储存信息

    三、主要模块

    (一)课程信息管理
    (二)学生信息管理
    (三)管理端系统登录保护、修改密码、注销

    四、系统架构

    在这里插入图片描述

    五、类的说明

    基类:
    (一)信息类
    包含:编号(number)、名称(name)、构造函数。

    class info//信息类
    {
    protected:
    	long number;//编号
    	string name;//名称
    public:
    	info() {}
    	info(long num, string name) :number(num), name(name) {}
    };
    

    派生类:
    (二)课程类:(继承编号、名称)
    包含:友元类(学生类)、课程学分、授课老师、拷贝构造函数及各种功能实现函数,并创建课程类动态数组。

    class course: public info//课程类
    {
    protected:
    	int credit;//学分
    	string teachername;//授课教师
    public:
    	course(){}
    	course(long num, string name, int cre, string tea) : info(num, name)
    	{
    		credit = cre;
    		teachername = tea;
    	}
    	static void print();//输出数据
    	static void get();//获取数据
    	static void add();//增加数据
    	static void del();//删除数据
    	static void edit();//修改数据
    	static int ishave(long si);//查询是否有该课程
    	friend class student;
    };vector<course> c;
    

    (三)学生类:(继承编号、名称)
    包含:课程数组、性别、年级、本学期需修学分、构造函数、各种功能实现函数、并创建学生类动态数组。

    class student: public info//学生类
    {
    protected:
    	string sex;//性别
    	string grade;//年级
    	long scredit;//本学期需修学分
    public:
    	vector<course> havec;//查询学生选课信息
    	student(){}
    	student(long num, string name, string se, string gra, long scr) : info(num, name)
    	{
    		sex = se;
    		grade = gra;
    		scredit = scr;
    	}
    	static void print();//输出数据
    	static void get();//获取数据
    	static void add();//增加数据
    	static void del();//删除数据
    	static void edit();//修改数据
    	static int ishave(long si);//查询是否有该学生
    	static void addcourse();// 为学生添加课程
    	static void delcourse();//为学生删除课程
    	static int ishavec(long si);//查询该学生是否有该课程
    };vector<student> s;
    

    六、项目运用课程知识汇总

    类指针、继承、访问控制、拷贝构造函数、引用、静态成员函数、动
    态数组(STL容器)、友元类、组合类。

    七、项目缺陷

    (一) 忽略了课程编号可能为001,0002等,应把基类编号改成string型,后面构造函数、功能函数等都需要修改。
    (二) 查询,删除,修改功能只实现编号操作,没有实现其他关键词操作。
    (三) 没有实现排序操作。为学生添加选课后,选课信息由时间顺序排列,未实现编号升降序。
    (四) 系统设计之初未考虑周全,导致某些功能中的循环嵌套有重复(如为学生添加选课信息),增加时间复杂度。即项目还存在较大的优化空间,以便节省系统开销。
    (五) 系统存在小bug,即某些时候选择退出系统需要选择两次才能退出。

    八、项目部分截图

    (未截全,仅展示部分功能,详情可使用该系统)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述
    详情访问 https://github.com/zhanjuex/Management_System
    可以的话给个星吧!

    展开全文
    zhanjuex 2020-08-20 17:27:08
  • 683KB qq_44813804 2020-06-09 23:44:32
  • 本系统是一个单机版的小型的学生选课管理系统,在本系统中,开发了一个面向管理员、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录密码、和查询成绩这几个服务,所选课程总数不能超过3...

    一、课程设计任务

    完成学生选课管理系统的开发

    二、需求描述

    本系统是一个单机版的小型的学生选课管理系统,在本系统中,开发了一个面向管理员、学生和教师这三个对象的教务平台,对学生提供的服务有登录、选课、、修改登录密码、和查询成绩这几个服务,所选课程总数不能超过3门;对教师提供的服务有登录、修改登录密码和登录成绩;对管理员提供的服务有登录开设学生和教师帐号、删除学生和教师帐号的服务。

    三、系统总体设计

    1.系统架构设计

    (1)架构:单机

    (2)运行软件环境: windows XP SP3 、jdk1.6

    (3)开发环境:

    硬件平台:

    CPU:P41.8GHz

    内存:256MB以上

    软件平台:windows XP SP3 、jdk1.6

    操作系统:WindowsXP

    数据库:SQL Server 2000、SQLServer SP4补丁

    开发工具:Eclipse 3.3

    分辨率:1024*768

    2.功能模块设计

    各模块功能:

    • 登录界面:登录界面是有帐号,密码两个JTextField,管理员帐号一字母A开头,教师帐号一字母T开头,学生帐号以字母S开头,登录帐号或密码输入错误会弹出相应的提示对话框。
    • 学生信息管理模块:管理员用于添加和删除学生信息的模块。
    • 教师信息管理模块:管理员用于添加和删除教师信息的模块。
    • 教师密码修改模块和学生密码修改模块:管理员添加的用户帐号的初始密码与用户的帐号相同,用户通过密码修改模块可以自己需改密码。
    • 教师录入成绩模块:教师可以浏览选修自己课程的学生的信息并且录入该学生的成绩。
    • 学生选择选修课模块:该模块通过表格的形式将所有课程列出来,学生可以根据个人兴趣选择不同的课程,每个学生选择的课程数目不能超过3门,而且不能重复选课,否则会弹出对话框,提示用户查看已经选择了的课程。
    • 学生查询成绩模块:通过表格的形式将该学生选择了的课程列出来,如果教师有录入成绩,则可以看到自己的课程成绩。

    3.数据库设计 (概要设计...)

    (1)E-R图

    (2)关系模式

    学生(学生学号,学生姓名,教师性别,教师生日,所在班级)

    教师(教师编号,教师姓名,教师性别,教师生日,教师职称,所在院系)

    课程(课程号,课程名,学分,选课人数)

    选课(课程号,学生学号,成绩)

    授课(课程号,教师编号,上课地点)

    (3)数据库管理系统:Microsoft SQL Server 2000

    (4)数据库命名

    StudentManager

    (5)数据库表

    Logon(登录帐号密码)

    主要用来保存用户登录信息

    字段名数据类型长度是否为空是否主键
    UserIDchar10不为空主键
    Passwordrcharr10

    StudentTable1(学生信息表)

    主要用来保存学生信息。

    字段名数据类型长度主键否是否为空描述
    StudentIDChar10主键不为空学生学号
    StudentNameChar10不为空学生姓名
    StudentSexChar2不为空学生性别
    StudentBirthdayDatetime8学生生日
    Classchar16所在班级

    TeacherTable1(教师信息表)

    用来储存教师的基本信息

    字段名数据类型长度主键否是否为空描述
    TeacherIDChar10主键不为空教师编号
    TeacherNameChar10不为空教师姓名
    TeacherSexChar2不为空教师性别
    TeacherBirthdayDatetime8教师生日
    Postchar10教师职称
    Departmentchar20所在院系

    CourseTable(课程信息表)

    字段名数据类型长度主键否是否为空描述
    CourseIDChar16主键不为空课程编号
    CourseNameChar16不为空课程名
    PointChar8不为空学分
    StuNumberDatetime4不为空选课人数

    ScoreTable(学生成绩表)

    用于存储学生成绩

    字段名数据类型长度是否为空是否主键
    CourseIDchar16不为空主键
    StudentIDchar10不为空主键
    Scoreint4

    TeachTable(j教师授课表)

    字段名数据类型长度是否为空是否主键
    CourseIDchar16不为空主键
    TeacherIDchar10不为空主键
    Locationint10
    (8)数据库账户及权限 (截图)

    学生账户表

    教师账户表

    用户登录表:

    (9)数据库存储过程:

    AllCourse:
    create proc AllCourse
    as
    begin
        select x.CourseID,x.CourseName,x.Point ,y.TeacherName,y.Post,z.Location,x.StuNumber
        from Course x,TeacherTable1 y,TeachTable z
        where x.CourseID=z.CourseID and y.TeacherID=z.TeacherID
    end
    DeleteLogon :
    create proc DeleteLogon(@id char(10))
    as
    begin 
        delete from Logon
        where UserID=@id
    end
    DeleteStudent:
    create proc DeleteStudent(@id char(10))
    as
    begin
       delete from StudentTable1
       where StudentID=@id
    end
    
    DeleteTeacher :
    create proc DeleteTeacher(@id char(10))
    as
    begin
       delete from TeacherTable1
       where TeacherID=@id
    end
    
    InsertLogon :
    create proc InsertLogon(@id char(10))
    as
    begin 
        insert into Logon
        values(@id,@id)
    end
    
    InsertStudent :
    create proc InsertStudent(@userid char(10),@username char(10),@sex char(2),@birth datetime,@class char(10))
    as
    begin
    insert into StudentTable1 values(@userid ,@username,@sex,@birth,@class)
    end
    return
    
    InsertTeacher:
    create proc InsertTeacher(@userid char(10),@username char(10),@sex char(2),@birth datetime,@post char(10),@department char(10))
    as
    begin
    insert into TeacherTable1 values(@userid ,@username,@sex,@birth,@post,@department)
    end
    return
    
    IsExistsStu :
    create proc IsExistsStu(@id char(10))
    as
    begin 
        select * from StudentTable1
        where StudentID=@id
    end
    
    IsExistsTea:
    create proc IsExistsTea(@id char(10))
    as
    begin 
        select * from Teachertable1
        where TeacherID=@id
    end
    
    ProcAllStu :
    create proc ProcAllStu
    as
    begin
    select * from StudentTable1
    end
    
    ProcAllTea 
    create proc ProcAllTea
    as
    begin
    select * from TeacherTable1
    end
    
    ProcLogon:
    create proc ProcLogon(@userid char(16),@password char(10))
    as
    begin
        select * 
        from Logon 
        where UserID=@userid and Password=@password
    end
    return
    
    ProcModify:
    create proc ProcModify(@id char(10),@password char(16))
    as
    begin
       update Logon 
       set Password=@password
       where UserID=@id
    end
    
    ProcStudent :
    create proc ProcStudent(@id char(10))
    as
    begin
       select * from StudentTable1
       where StudentID=@id
    end
    
    SelectCourse :
    create proc SelectCourse(@id char(10),@courseid char(16))
    as
    begin
        insert into ScoreTable
        values(@courseid,@id,null)
    end
    
    SelectedCourse: 
    create proc SelectedCourse(@id char(10))
    as
    begin
        select * from ScoreTable
        where @id=StudentID
    end
    
    SelectedCourseNum:
    create proc SelectedCourseNum(@id char(10))
    as
    begin
        select COUNT(*)
        from Scoretable
        where StudentID=@id
    end
    
    SelectedDetail :
    create proc SelectedDetail(@id char(10))
    as
    begin
        select x.CourseID,x.CourseName,x.Point ,y.TeacherName,y.Post,z.Location,s.Score
        from Course x,TeacherTable1 y,TeachTable z,ScoreTable s
        where @id=s.StudentID and x.CourseID=z.CourseID and z.TeacherID=y.TeacherID
              and x.CourseID=s.CourseID
    end
    
    

    4.系统界面设计

    (1)窗体功能描述

    登录界面Logon.java

    管理员以帐号Admin密码123登录成功进入管理员的信息管理界面,通过点击“学生信息管理”和“教师信息管理”进入不同的管理界面,学生信息管理界面如下:

    教师信息管理界面如下:

    以学生帐号(如:帐号:S001001,密码:S001001)登陆成功后进入如下界面,首先显示的 是学生的基本信息:

    点击“课程列表”按钮进入如下界面

    根据自己的跟人兴趣选择课程,选择的课程数目不能超过3门否则弹出对话框如下:

    点击“确定”跳转到已选课程列表。

    在主界面点击“已选课程”按钮也可以进入下面的界面查看已经选择的课程:

    以教师帐号(如:帐号:T01001,密码:T01001)登陆成功后进入如下界面,首先显示的 是教师的基本信息,

    点击“录入成绩”可以通过表格来录入学生的成绩,界面如下图所示:

    (2)页面/窗体关系结构图

    3

    四、系统实现技术小结

    为了方便管理,将数据库的封装分成两部分,数据库资源配置文件和封装数据库操作的类SqlManager.java:

    • 数据库资源配置文件sysConfig.properties:
    #Sepecify the system type: window or unix
    system-type=windows
    
    #specify the database's type
    database-type=sqlserver
    
    #specify some parameters
    DBhost=localhost
    DBport=1433
    DBname=StudentManager
    DBuser=sa
    DBpassword=
    
    • 封装数据库操作的类**:SqlManager.java**

      import java.sql.*;
      import java.util.*;
      import javax.swing.JOptionPane;
      public class SqlManager {
      	private static SqlManager p=null;
      	private PropertyResourceBundle bundle;
      	private static String jdbcDriver=null;
      	private static String split=null;
      	private String DBType=null;
      	private String DBhost="localhost";
      	private String DBname="";
      	private String DBport="";
      	private String DBuser="";
      	private String DBpassword="";
      	private Connection Sqlconn=null;
      	private Statement Sqlstmt=null;
      	private String strCon=null;
      	private SqlManager(){
            try{
                bundle=new PropertyResourceBundle(SqlManager.class.
                        getResourceAsStream("/sysConfig.properties"));	
                this.DBhost=getString("DBhost");
                this.DBname=getString("DBname");
                this.DBport=getString("DBport");
                this.DBuser=getString("DBuser");
                this.DBpassword=getString("DBpassword");			
                String system_type=getString("system-type");
                if(system_type!=null){
                    if(system_type!=null){
                        if(system_type.toLowerCase().equals("widows"))
                            split=";";
                        else if(system_type.toLowerCase().equals("unix"))
                            split=":";
                    }
                    String database_type=getString("database-type");
                    this.DBType=database_type;
                    if(database_type!=null){
                        if(database_type.toLowerCase().equals("mysql")){
                            jdbcDriver="com.mysql.jdbc.Driver";
                            strCon="jdbc:mysql://"+DBhost+":"+DBport+"/"+DBname;
                        }
                        else if(database_type.toLowerCase().equals("oracle")){
                            jdbcDriver="oracle.jdbc.driver.OracleDriver";
                            strCon="jdbc:oracle:thin:@"+DBhost+":"+DBport+":"+DBname;
                        }
                        else if(database_type.toLowerCase().equals("sqlserver")){
                            jdbcDriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";
                            strCon="jdbc:microsoft:sqlserver://"+DBhost+":"+DBport+";DatabaseName="+DBname;
                        }
                    }
                }	
            }catch(Exception e){
                e.printStackTrace();
            }
      	}
      	public static SqlManager createInstance(){
            if(p==null)
            {
                p=new SqlManager();
                p.initDB();
            }
            return p;
      	}
      	private String getString(String s)
      	{
            return this.bundle.getString(s);
      	}
      	public void initDB(){
            System.out.println(strCon);
            System.out.println(jdbcDriver);
            try{
                Class.forName(jdbcDriver);
            }catch(Exception ex){
                System.err.println("Can't Find Database Driver.");
            }
      	}
      	public void connectDB(){
            try{
                System.out.println("SqlManager:Connecting to database...");
                Sqlconn=DriverManager.getConnection(strCon,DBuser,DBpassword);
                Sqlstmt=Sqlconn.createStatement();
            }catch(SQLException ex){
                System.err.println("connectDB"+ex.getMessage());
            }
            System.out.println("SqlManager:Connect to database successful.");
      	}
      	public void closeDB(){
            try{
                System.out.println("SqlManager:Close connection to database...");
                Sqlstmt.close();
                Sqlconn.close();
            }catch(SQLException ex){
                System.err.println("closeDB:"+ex.getMessage());
            }
            System.out.println("Sqlmanager:Close connection successful.");
      	}
      	public int executeUpdate(String sql){
            int ret=0;
            try{
                ret=Sqlstmt.executeUpdate(sql);
            }catch(SQLException ex)
            {
                System.out.println("executeUpdate:"+ex.getMessage());
            }
            return ret;
      	}
      	public ResultSet executeQuery(String sql){
            ResultSet rs=null;
            try{
                rs=Sqlstmt.executeQuery(sql);
            }catch(SQLException ex){
                System.err.println("executeQuery:"+ex.getMessage());
            }
            return rs;
      	}
      	public static void main(String args[]){
            SqlManager.createInstance().connectDB();
            SqlManager.createInstance().closeDB();
      	}
      }
      

    五、课程设计体会

    该系统主要实现了学生选课的功能,这个系统是我独立完成,从需求分析,界面的搭建,到数据库的连接,表格,存储过程和存储过程等的建立,在这段时间的摸索中,我确实学到了很多东西,特别是对以前不太了解的Java Swing组件有了更深刻的了解。比如JTable,对于它的用法我在网上找了很多资料,JTable的建立有各种不同的方法,可以使用DefaultTableModel类来实现,如DefaultTableModel dtm=new DefaultTableModel(new Object [] {"","课程编号","课程名称","学分","任课教师","教师职称","上课地点","以选人数"},0));然后再table.setModel(dtm); 或者继承AbstractTableModel类,还有对于如何在JTable中添加Swing组件,原本我是直接新建一个JcheckBox对象直接添加到表格的 单元格里,结果发现只能显示出一串字符串,上网查找后才知道,要用DefaultCellEditor来添加Swing组件,再设置setCellRenderer(new MyTableRenderer()) 这是一个实现了TableCellRenderer接口的JCheckBox。TableCellRenderer可以看做是Swing组件的呈现器,这样Table就会把内容显示绘制交给JCheckBox了。对于数据库,我尽量将对数据库的操作放在存储过程中,这样的抽象和封装使得源程序代码更加容易理解,而且在web应用系统中也可以避免发生不安全的状况,我想这是一个号的程序员应当要养成的习惯,在这次的课程设计中,层次化,模块化,抽象化也是我学到的一个重要的经验,参考一些资料后发现模块化能使程序设计更加简单,设计代码时目标更加明确,效率更高,以前虽然也知道这些道理,但自己真正实施起来却感到无从下手,比如前面的数据库操作和数据库资源配置文件,就是我从书中看来的,这样做的好处是,在程序中操作数据库的时候避免了使用很多try和catch语句,是代码更加简洁,更容易理解,此外需要连接不同的数据库时只要修改数据库的资源配置文件sysConfig.properties就可以了。原本我是想用jsp 做一个web应用程序的,因为对于学生选课系统做成单版的确实没什么实用性,但是我对jsp还不太熟悉,所以这次先做个单机版的,以后我会尝试用jsp来做这个系统。

    六、系统主要源程序清单

    AdmPanel.java:

    public class AdmPanel extends JPanel implements ActionListener,ItemListener,MouseListener
    {
    	JButton b1,b2,b3,b4,b5,b6;
    	JPanel p1,p2,pCenter;
    	CardLayout card=null;
    	JTextField t1=new JTextField(10),
                   t2=new JTextField(10),
                   t3=new JTextField(10),
                   tt1=new JTextField(10),
                   tt2=new JTextField(10),
                   tt3=new JTextField(10);
    	ButtonGroup sex1=new ButtonGroup(),
    	            sex2=new ButtonGroup();
    	JRadioButton radio1=new JRadioButton("男",true),
    	             radio2=new JRadioButton("女");
    	JRadioButton r1=new JRadioButton("男",true),
                     r2=new JRadioButton("女");
    	JComboBox year,month,date,yy,mm,dd,post;
    	JTable table1,table2;
    	Vector vectorColName1=new Vector(),
    	       vectorColName2=new Vector();
    	Vector vector1=new Vector(),
    	       vector2=new Vector();
    	DefaultTableModel model1=new DefaultTableModel(vectorColName1,0){
    		public boolean isCellEditable(int row, int column)
            {
                return false;
            }
    	};
    	DefaultTableModel model2=new DefaultTableModel(vectorColName2,0){
    		 public boolean isCellEditable(int row, int column)
             {
                 return false;
             }
    	};
    	AdmPanel()
    	{
    		setLayout(new BorderLayout());
    		t1=new JTextField(10);
    		t2=new JTextField(10);
    		t3=new JTextField(10);
    		tt1=new JTextField(10);
    		tt2=new JTextField(10);
    		tt3=new JTextField(10);
    		sex1.add(radio1);
    		sex1.add(radio2);
    		sex2.add(r1);
    		sex2.add(r2);
    		year=new JComboBox();
    		month=new JComboBox();
    		date=new JComboBox();
    		yy=new JComboBox();
    		mm=new JComboBox();
    		dd=new JComboBox();
    		post=new JComboBox();
    		post.addItem("助教");
    		post.addItem("讲师");
    		post.addItem("副教授");
    		post.addItem("教授");
    		for(int i=1980;i<1995;i++)
    			year.addItem(i);
    		for(int i=1;i<=12;i++)
    			month.addItem(i);
    		for(int i=1;i<=31;i++)
    			date.addItem(i);
    		for(int i=1950;i<1995;i++)
    			yy.addItem(i);
    		for(int i=1;i<=12;i++)
    			mm.addItem(i);
    		for(int i=1;i<=31;i++)
    			dd.addItem(i);
    		year.addItemListener(this);
    		month.addItemListener(this);
    		yy.addItemListener(this);
    		mm.addItemListener(this);
    		post.addItemListener(this);
    		b1=new JButton("学生信息管理");
    		b2=new JButton("教师信息管理");
    		b3=new JButton("输入");
    		b4=new JButton("删除");
    		b5=new JButton("输入");
    		b6=new JButton("删除");
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    		b4.addActionListener(this);
    		b5.addActionListener(this);
    		b6.addActionListener(this);
    		JPanel p0=new JPanel();
    		p0.add(b1);
    		p0.add(b2);
    		pCenter=new JPanel();
    		card=new CardLayout();
    		pCenter.setLayout(card);
    		p1=createStuPanel();
    		p2=createTeaPanel();
    		pCenter.add("学生信息管理",p1);
    		pCenter.add("教师信息管理",p2);
    		add(p0,BorderLayout.NORTH);
    		add(pCenter,BorderLayout.CENTER);
    	}
    	private JPanel createStuPanel()
    	{
    		JPanel p=new JPanel();
    		JScrollPane p1;
    		JPanel p2=new JPanel();
    		p.setLayout(new GridLayout(2,1));
    		SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    		DBm.connectDB();
    		String sql="exec ProcAllStu";
    		ResultSet rs=DBm.executeQuery(sql);
    		vectorColName1.addElement("学号");   
    		vectorColName1.addElement("姓名");   
    		vectorColName1.addElement("性别");   
    		vectorColName1.addElement("生日");   
    		vectorColName1.addElement("班级");
    		model1.setDataVector(vector1,vectorColName1);
    		table1=new JTable(model1);
    		table1.addMouseListener(this);
    		p1=new JScrollPane(table1);	
    		p.add(p1);
    		try{
    			while(rs.next()){   
    		          Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
    		          rec_vector.addElement(rs.getString(1));   
    		          rec_vector.addElement(rs.getString(2));   
    		          rec_vector.addElement(rs.getString(3));   
    		          rec_vector.addElement(rs.getString(4));   
    		          rec_vector.addElement(rs.getString(5));   
    		          vector1.addElement(rec_vector);//向量rec_vector加入向量vect中   
    		                          }   
    			rs.close();
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    		DBm.closeDB();	
    		//构造p2
    		Box base=Box.createHorizontalBox(),
    		    boxleft=Box.createVerticalBox(),
    		    boxright=Box.createVerticalBox();
    		JPanel pp1=new JPanel(),
    		       pp2=new JPanel(),
    		       pp3=new JPanel(),
    		       pp4=new JPanel(),
    		       pp5=new JPanel(),
    		       pp6=new JPanel(),
    		       psex=new JPanel(),
    		       pbirth=new JPanel();
    		psex.add(radio1);
    		psex.add(radio2);
    		pbirth.add(year);
    		pbirth.add(month);
    		pbirth.add(date);
    		pp1.add(new JLabel("学生编号:"));
    		pp1.add(t1);
    		pp2.add(new JLabel("学生姓名:"));
    		pp2.add(t2);
    		pp3.add(new JLabel("学生性别:"));
    		pp3.add(psex);
    		pp4.add(new JLabel("学生生日:"));
    		pp4.add(pbirth);
    		pp5.add(new JLabel("所在班级:"));
    		pp5.add(t3);
    		pp6.add(b3);
    		pp6.add(b4);
    		boxleft.add(Box.createVerticalStrut(30));
    	    boxleft.add(pp1);
    	    boxleft.add(Box.createVerticalStrut(20));
    	    boxleft.add(pp2);
    	    boxleft.add(Box.createVerticalStrut(20));
    	    boxleft.add(pp3);
    	    boxright.add(Box.createVerticalStrut(20));
    	    boxright.add(pp4);
    	    boxright.add(Box.createVerticalStrut(20));
    	    boxright.add(pp5);
    	    boxright.add(Box.createVerticalStrut(20));
    	    boxright.add(pp6);
    		base.add(boxleft);
    		base.add(Box.createHorizontalStrut(80));
    		base.add(boxright);
    		p2.add(base);
    		p.add(p2);
    		return p;
    	}
    	private JPanel createTeaPanel()
    	{
    		JPanel p=new JPanel();
    		JScrollPane p1;
    		JPanel p2=new JPanel();
    		p.setLayout(new GridLayout(2,1));		
    		SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    		DBm.connectDB();
    		String sql="exec  ProcAllTea";
    		ResultSet rs=DBm.executeQuery(sql);
    		vectorColName2.addElement("教师编号");   
    		vectorColName2.addElement("教师姓名");   
    		vectorColName2.addElement("教师性别");   
    		vectorColName2.addElement("生日");   
    		vectorColName2.addElement("职称");
    		vectorColName2.addElement("所在院系");
    		model2.setDataVector(vector2,vectorColName2);
    		table2=new JTable(model2);
    		table2.addMouseListener(this);
    		p1=new JScrollPane(table2);	
    		p.add(p1);
    		try{
    			while(rs.next()){   
    		          Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
    		          rec_vector.addElement(rs.getString(1));   
    		          rec_vector.addElement(rs.getString(2));   
    		          rec_vector.addElement(rs.getString(3));   
    		          rec_vector.addElement(rs.getString(4));   
    		          rec_vector.addElement(rs.getString(5)); 
    		          rec_vector.addElement(rs.getString(6)); 
    		          vector2.addElement(rec_vector);//向量rec_vector加入向量vect中   
    		    }   
    		          //tm.fireTableStructureChanged();//更新表格,显示向量vect的内容  
    			rs.close();
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    		DBm.closeDB();		
    		//构造p2
    		Box base=Box.createHorizontalBox(),
    	    boxleft=Box.createVerticalBox(),
    	    boxright=Box.createVerticalBox();
    	    JPanel pp1=new JPanel(),
    	           pp2=new JPanel(),
    	           pp3=new JPanel(),
    	           pp4=new JPanel(),
    	           pp5=new JPanel(),
    	           pp6=new JPanel(),
    	           pp7=new JPanel(),
    	           psex=new JPanel(),
    	           pbirth=new JPanel();
    	    psex.add(r1);
    	    psex.add(r2);
    	    pbirth.add(yy);
    	    pbirth.add(mm);
    	    pbirth.add(dd);
    	    pp1.add(new JLabel("教职工号:"));
    	    pp1.add(tt1);
    	    pp2.add(new JLabel("教师姓名:"));
    	    pp2.add(tt2);
    	    pp3.add(new JLabel("教师性别:"));
    	    pp3.add(psex);
    	    pp4.add(new JLabel("教师生日:"));
    	    pp4.add(pbirth);
    	    pp5.add(new JLabel("教师职称:"));
    	    pp5.add(post);
    	    pp6.add(new JLabel("所在院系:"));
    	    pp6.add(tt3);
    	    pp7.add(b5);
    	    pp7.add(b6);
    	    boxleft.add(Box.createVerticalStrut(40));
    	    boxleft.add(pp1);
    	    boxleft.add(Box.createVerticalStrut(20));
    	    boxleft.add(pp2);
    	    boxleft.add(Box.createVerticalStrut(20));
    	    boxleft.add(pp3);
    	    boxright.add(Box.createVerticalStrut(30));
    	    boxright.add(pp4);
    	    boxright.add(Box.createVerticalStrut(10));
    	    boxright.add(pp5);
    	    boxright.add(Box.createVerticalStrut(10));
    	    boxright.add(pp6); 
    	    boxright.add(pp7);
    	    base.add(boxleft);
    	    base.add(Box.createHorizontalStrut(80));
    	    base.add(boxright);
    		p2.add(base);
    		p.add(p2);
    		return p;
    	}
    	public void actionPerformed(ActionEvent e)
    	{
    		if(e.getSource()==b1)
    		{
    			card.show(pCenter, "学生信息管理");
    		}
    		else if(e.getSource()==b2)
    		{
    			card.show(pCenter, "教师信息管理");
    		}
    		if(e.getSource()==b3)
    		{			
    			String userid=t1.getText(),
    			       username=t2.getText(),
    			       classs=t3.getText();
    			String sex="男";
    			if(radio2.isSelected())
    			{
    				sex="女";
    			}
    			String birth=String.valueOf((Integer)year.getSelectedItem())+"-"
    			               +String.valueOf((Integer)month.getSelectedItem())
    			               +"-"+String.valueOf((Integer)date.getSelectedItem());	
    			String sql="exec InsertStudent'"+userid+"','"+username+"','"+sex+"','"+birth+"','"+classs+"'";
    			String s="exec IsExistsStu'"+userid+"'";
    			String inserlog="exec InsertLogon'"+userid+"'";
    			System.out.println(sql);
    			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    			DBm.connectDB();
    	        
    			
    			ResultSet rset=DBm.executeQuery(s);
    			System.out.println(s);
    			
    			try{
    				if (rset.next())
    				{
    					JOptionPane.showMessageDialog(this,"学生信息插入失败,该学生ID号已存在",
    							"警告",JOptionPane.WARNING_MESSAGE);
    					rset.close();
    				}
    				else{ 
    					ResultSet rs=DBm.executeQuery(sql);
    					
    					if(rs.next())
    					{
    						JOptionPane.showMessageDialog(this,"学生信息插入成功",
    								"成功",JOptionPane.WARNING_MESSAGE);
    						DBm.connectDB();
    						DBm.executeUpdate(inserlog);
    						t1.setText("S");
    						t2.setText(null);
    						t3.setText(null);
    						radio1.setSelected(true);
    						//this.post.setSelectedIndex(0);
    						year.setSelectedIndex(0);
    						month.setSelectedIndex(0);
    						date.setSelectedIndex(0);
    						//sql="select * from Inserted";
    						//ResultSet rs=DBm.executeQuery(sql);
    						Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
    				        rec_vector.addElement(rs.getString(1));   
    				        rec_vector.addElement(rs.getString(2));   
    				        rec_vector.addElement(rs.getString(3));   
    				        rec_vector.addElement(rs.getString(4));   
    				        rec_vector.addElement(rs.getString(5));   
    				        vector1.addElement(rec_vector);//向量rec_vector加入向量vect中       
    				        model1.fireTableStructureChanged();//更新表格,显示向量vect的内容   
    				        rs.close();    
    					}
    					else{
    						JOptionPane.showMessageDialog(this,"学生信息插入失败",
    								"警告",JOptionPane.WARNING_MESSAGE);
    						rs.close();
    					}
    				}
    			}catch(SQLException ex){
    				ex.printStackTrace();
    			}
    			DBm.closeDB();
    		}
    		if(e.getSource()==b4)
    		{
    			//同步删除数据库中的数据
    			int selectrow = 0;
    	        selectrow =table1.getSelectedRow();
    			String id =table1.getValueAt(selectrow,0).toString();
    			String sql="exec DeleteStudent'"+id+"'";
    			String deletelog="exec DeleteLogon'"+id+"'";
    			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    			DBm.connectDB();
    			if(DBm.executeUpdate(sql)==1)
    			{
    				JOptionPane.showMessageDialog(this,"学生信息已删除",
    						"删除成功",JOptionPane.INFORMATION_MESSAGE);
    				DBm.connectDB();
    				DBm.executeUpdate(deletelog);
    				model1.removeRow(selectrow); 
    				t1.setText("S");
    				t2.setText(null);
    				t3.setText(null);
    				radio1.setSelected(true);
    				year.setSelectedIndex(0);
    				month.setSelectedIndex(0);
    				date.setSelectedIndex(0);				
    			}
    			DBm.closeDB();
    		}
    		if(e.getSource()==b5)
    		{
    			String userid=tt1.getText(),
    			       username=tt2.getText(),
    			       depart=tt3.getText(),
    			       post=(String)this.post.getSelectedItem();
    			String sex="男";
    			if(r2.isSelected())
    			{
    				sex="女";
    			}
    			String birth=String.valueOf((Integer)yy.getSelectedItem())+"-"+String.valueOf((Integer)mm.getSelectedItem())
                              +"-"+String.valueOf((Integer)dd.getSelectedItem());	
    			String sql="exec InsertTeacher'"+userid+"','"+username+"','"+sex+"','"+birth+"','"+post+"','"+depart+"'";
    			String s="exec IsExistsTea'"+userid+"'";
    			String insertlog="exec InsertLogon'"+userid+"'";
    			System.out.println(sql);
    			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    			DBm.connectDB();
    			ResultSet rset=DBm.executeQuery(s);
    			System.out.println(s);
    			try{
    				if (rset.next())
    				{
    					JOptionPane.showMessageDialog(this,"教师信息插入失败,该教师ID号已存在",
    							"警告",JOptionPane.WARNING_MESSAGE);
    					rset.close();
    				}
    				else{ 
    					ResultSet rs=DBm.executeQuery(sql);
    					if(rs.next())
    					{
    						JOptionPane.showMessageDialog(this,"教师信息插入成功",
    								"成功",JOptionPane.WARNING_MESSAGE);
    						DBm.connectDB();
    						DBm.executeUpdate(insertlog);
    						tt1.setText("T");
    						tt2.setText(null);
    						tt3.setText(null);
    						r1.setSelected(true);
    						this.post.setSelectedIndex(0);
    						yy.setSelectedIndex(0);
    						mm.setSelectedIndex(0);
    						dd.setSelectedItem(0);
    
    						Vector   rec_vector=new   Vector();//从结果集中取数据放入向量rec_vector中   
    				        rec_vector.addElement(rs.getString(1));   
    				        rec_vector.addElement(rs.getString(2));   
    				        rec_vector.addElement(rs.getString(3));   
    				        rec_vector.addElement(rs.getString(4));   
    				        rec_vector.addElement(rs.getString(5)); 
    				        rec_vector.addElement(rs.getString(6)); 
    				        vector2.addElement(rec_vector);//向量rec_vector加入向量vect中       
    				        model2.fireTableStructureChanged();//更新表格,显示向量vect的内容   
    				        rs.close(); 					          
    					}
    					else{
    						JOptionPane.showMessageDialog(this,"教师信息插入失败",
    								"警告",JOptionPane.WARNING_MESSAGE);
    						rs.close();
    					}
    				}
    			}catch(SQLException ex){
    				ex.printStackTrace();
    			}
    			DBm.closeDB();
    		}
    		if(e.getSource()==b6)
    		{
    			//同步删除数据库中的数据
    			int selectrow = 0;
    	        selectrow =table2.getSelectedRow();
    			String id =table2.getValueAt(selectrow,0).toString();
    			String sql="exec DeleteTeacher'"+id+"'";
    			String deletelog="exec DeleteLogon'"+id+"'";
    			SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    			DBm.connectDB();
    						if(DBm.executeUpdate(sql)==1)
    			{
    				JOptionPane.showMessageDialog(this,"教师信息信息已删除",
    						"删除成功",JOptionPane.INFORMATION_MESSAGE);
    				DBm.connectDB();
    				DBm.executeUpdate(deletelog);
    				model2.removeRow(selectrow); 
    				tt1.setText("T");
    				tt2.setText(null);
    				tt3.setText(null);
    				r1.setSelected(true);
    				yy.setSelectedIndex(0);
    				mm.setSelectedIndex(0);
    				dd.setSelectedIndex(0);
    			}
    			DBm.closeDB();
    		}
    	}
    	public void mousePressed(MouseEvent e){}
    	public void mouseReleased(MouseEvent e){}
    	public void mouseEntered(MouseEvent e){}
    	public void mouseExited(MouseEvent e){}
    	public void mouseMoved(MouseEvent e){}
    	public void mouseDraged(MouseEvent e){}
    	public void mouseClicked(MouseEvent e)
    	{
    		if(e.getSource()==table1)
    		{
    			int selectrow = 0;
    	        selectrow =table1.getSelectedRow();
    			String id =table1.getValueAt(selectrow,0).toString();
    			String name=table1.getValueAt(selectrow,1).toString();
    			String sex=table1.getValueAt(selectrow,2).toString();
    			String birth=table1.getValueAt(selectrow,3).toString().substring(0,10);
    			String classs=table1.getValueAt(selectrow,4).toString();
    			t1.setText(id);
    			t2.setText(name);
    			t3.setText(classs);
    			if(sex.trim().equals("男"))
    				radio1.setSelected(true);
    			else if(sex.equals("女"))
    				radio2.setSelected(true);
    			int y=Integer.parseInt(birth.substring(0, 4));
    			int m=Integer.parseInt(birth.substring(5, 7));
    			int d=Integer.parseInt(birth.substring(8));
    			year.setSelectedIndex(y-1980);
    			month.setSelectedIndex(m-1);
    			date.setSelectedIndex(d-1);
    		}
    		else if(e.getSource()==table2)
    		{
    			int selectrow = 0;
    	        selectrow =table2.getSelectedRow();
    			String id =table2.getValueAt(selectrow,0).toString();
    			String name=table2.getValueAt(selectrow,1).toString();
    			String sex=table2.getValueAt(selectrow,2).toString();
    			String birth=table2.getValueAt(selectrow,3).toString().substring(0,10);
    			String position=table2.getValueAt(selectrow,4).toString();
    			String depart=table2.getValueAt(selectrow,5).toString();
    			tt1.setText(id);
    			tt2.setText(name);
    			tt3.setText(depart);
    			if(sex.trim().equals("男"))
    				r1.setSelected(true);
    			else if(sex.equals("女"))
    				r2.setSelected(true);
    			int y=Integer.parseInt(birth.substring(0, 4));
    			int m=Integer.parseInt(birth.substring(5, 7));
    			int d=Integer.parseInt(birth.substring(8));
    			yy.setSelectedIndex(y-1950);
    			mm.setSelectedIndex(m-1);
    			dd.setSelectedIndex(d-1);
    			if(position.equals("助教"))
    				post.setSelectedIndex(0);
    			else if(position.equals("讲师"))
    				post.setSelectedIndex(1);
    			else if(position.equals("副教授"))
    				post.setSelectedIndex(2);
    			else if(position.equals("教授"))
    				post.setSelectedIndex(3);
    		}
    	}
    	public void itemStateChanged(ItemEvent e)
    	{//主要实现生日日期的选择(略)
        } 
    

    CourseList.java:

    public class CourseList extends JPanel implements ActionListener
    {
    	int count=0;//可供选择的课程数
    	MyTable table1;
    	JTable table2;
    	TableColumnModel tcm;
    	JButton button;
    	CourseList()
    	{
    		setLayout(new BorderLayout());
    		button=new JButton("确定");
    		button.addActionListener(this);
    		JPanel p=new JPanel();
    		p.add(button);
    		table1=new MyTable();
    		JTable table2=initTable(table1);
    		JScrollPane sp=new JScrollPane(table2);
    		add(sp,BorderLayout.CENTER);
    		add(p,BorderLayout.SOUTH);
    	}
    	private JTable initTable(JTable table) {   
            DefaultTableModel dtm = new DefaultTableModel(   
                new Object [] {"","课程编号","课程名称","学分","任课教师","教师职称","上课地点","以选人数"},0);   
            SqlManager DBm=SqlManager.createInstance();
            DBm.connectDB();
            String sql="exec AllCourse";//所有选修课,如果选课人数没有达到5时设置MyTable.b=true;
            ResultSet rs=DBm.executeQuery(sql);
            try{
            	while(rs.next())
                {
            		dtm.addRow(new Object[] {new Boolean(false),rs.getString(1),rs.getString(2),
            				rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6),rs.getString(7)});
            		count++;
                }
            	rs.close();
            }catch(SQLException e){
            	e.printStackTrace();
            }
            DBm.closeDB();
            table.setModel(dtm);   
            TableColumnModel tcm = table.getColumnModel();   
            tcm.getColumn(0).setCellEditor(new DefaultCellEditor(new JCheckBox()));   
            tcm.getColumn(0).setCellRenderer(new MyTableRenderer());
            tcm.getColumn(0).setPreferredWidth(20);   
            tcm.getColumn(0).setWidth(20);   
            tcm.getColumn(0).setMaxWidth(20);   
            return table;   
    	}
    	
    	public void actionPerformed(ActionEvent e)
    	{
    		if(e.getSource()==button)
    		{
    			if(selectcourse()>0)
    			{
    				JOptionPane.showMessageDialog(this,"选课成功\n点击\"确定\"查看以选课程",
    						"选课成功",JOptionPane.INFORMATION_MESSAGE);
    				ChooseList.updateTable();
    				StuPanel.card.show(StuPanel.pCenter, "已选课程");
    			}
    		}
    	}
    	public int selectcourse()
    	{
    		int selectedCount=ChooseList.getSelectedCount();
    		int a=xianzhi();
    		int c=0;
    		String[] courseID=new String[selectedCount];
    		if(selectedCount==3)
    		{
    			JOptionPane.showMessageDialog(this,"选课数目不能超过3门,你已经选择了3门\n点击\"确定\"查看以选课程",
    					"警告",JOptionPane.WARNING_MESSAGE);
    			ChooseList.updateTable();
    			StuPanel.card.show(StuPanel.pCenter, "已选课程");
    			return c ;
    		}
    		else{
    			if(a+selectedCount>3)
    			{
    				JOptionPane.showMessageDialog(this,"选课数目不能超过3门,你已经选择了"+selectedCount+"门\n点击\"确定\"查看以选课程",
    						"警告",JOptionPane.WARNING_MESSAGE);
    				ChooseList.updateTable();
    				StuPanel.card.show(StuPanel.pCenter, "已选课程");
    				return c;
    			}
    			else
    			{//不能选重复了
    				String sql="exec SelectedCourse'"+Logon.userid+"'";
    				//System.out.println(sql+"不能选重复了");
    				SqlManager DBm=SqlManager.createInstance();
    				DBm.connectDB();
    				ResultSet rs=DBm.executeQuery(sql);
    				try{
    					int i=0;
    					while(rs.next()){
    						courseID[i]=rs.getString(1).trim();
    						System.out.println(courseID[i]+"changdu");
    					}
    					rs.close();
    				}catch(SQLException e){
    					e.printStackTrace();
    					return c;
    				}
    				DBm.closeDB();
    				for(int i=0;i<count;i++)
    				{
    					for(int j=0;j<selectedCount;j++)
    					{
    						if(table1.getValueAt(i,0).toString().equals("true"))
    						{
    							//System.out.println(table1.getValueAt(i,1).toString().trim()+"选课不能重复,点击");
    							//System.out.println(courseID[j]);
    							if(table1.getValueAt(i,1).toString().trim().equals(courseID[j])){
    								JOptionPane.showMessageDialog(this,"选课不能重复,\n点击\"确定\"查看已选课程",
    										"警告",JOptionPane.WARNING_MESSAGE);
    								ChooseList.updateTable();
    								StuPanel.card.show(StuPanel.pCenter, "已选课程");
    								return c;
    						    }
    						}
    					}	
    				}
    				for(int i=0;i<count;i++)
    				{
    					if(table1.getValueAt(i,0).toString().equals("true"))
    					{
    						String courseid=table1.getValueAt(i,1).toString();
    						sql="exec SelectCourse'"+Logon.userid+"','"+courseid+"'";
    						DBm.connectDB();
    						c=DBm.executeUpdate(sql);
    						DBm.closeDB();
    						System.out.println("c1="+c);
    					}System.out.println("c2="+c);
    				}
    				if(c==0)
    				{
    					JOptionPane.showMessageDialog(this,"请选择选修课",
    							"警告",JOptionPane.WARNING_MESSAGE);
    				}
    				return c;
    			}
    		}
    	}
    	public int xianzhi()
    	{
    		int a=0;
    		for(int i=0;i<count;i++)
    		{
    			if(table1.getValueAt(i,0).toString().equals("true"))
    				a++;
    		}
    		return a;
    	}
    }
    class MyTable extends JTable
    {
    	static boolean b=true;	
    	public   boolean   isCellEditable(int   rowIndex,   int   columnIndex){
    		if (columnIndex>0)return false;   
    		else return true;
    	}	
    }
    class MyTableRenderer extends JCheckBox implements TableCellRenderer 
    {
        public Component getTableCellRendererComponent( JTable table,   
                Object value,   
                boolean isSelected,   
                boolean hasFocus,   
                int row,   
                int column ) {   
            Boolean b = (Boolean) value;   
            this.setSelected(b.booleanValue());   
            return this;   
        }   
    } 
    

    Logon.java

    class Logon extends JPanel 
    {
    	JTextField t1;
    	JPasswordField t2;
    	JButton button1,button2;
    	static String info[];
    	static String userid,password;
    	Logon()
    	{
    		JLabel label=new JLabel("登陆");
    		label.setFont(new Font("TimesRoman",Font.BOLD,24));
    		t1=new JTextField(20);
    		t2=new JPasswordField(20);
    		button1=new JButton("登陆");
    		button2=new JButton("取消");
    		JPanel p1,p2,p3,p4;
    		Box box=Box.createVerticalBox();
    		p1=new JPanel();//p1.setBackground(Color.PINK);
    		p2=new JPanel();
    		p3=new JPanel();
    		p4=new JPanel();
    		p1.add(label);
    		p2.add(new Label("用户名:"));
    		p2.add(t1);
    		p3.add(new Label("口    令:"));
    		p3.add(t2);
    		p4.add(button1);
    		p4.add(button2);	
    		box.add(p1);
    		box.add(p2);
    		box.add(p3);
    		box.add(p4);
    		add(box);
    	}
    	public char logon() throws SQLException
    	{
    		String tuserid=t1.getText();
    		String tpassword=new String(t2.getPassword());
    		String sql1=null,sql2=null;
    		ResultSet rs=null;
    		SqlManager DBm=SqlManager.createInstance();//单态模式获取实例
    		DBm.connectDB();
    		sql1="exec ProcLogon'"+tuserid+"','"+tpassword+"'";
    		rs=DBm.executeQuery(sql1);
    		
    		if(rs.next())//如果存储过程有结果返回,则将用户信息读入并保存
    		{
    			System.out.println(rs.getString(1)+"如果存储过程有结果返回,则将用户信息读入并保存");
    			userid=rs.getString(1);
    			password=rs.getString(2);
    			if(userid.startsWith("T"))
    			{
    				TeaInfo.saveTea(userid);
    				
    			}
    			else if(userid.startsWith("S"))
    			{
    				StuInfo.saveStu(userid);
    			}
    			else if(userid.startsWith("A"))
    			{
    				sql2=sql1;
    				DBm.connectDB();
    				rs=DBm.executeQuery(sql2);
    			}
    			rs.close();
    			DBm.closeDB();
    			return userid.substring(0, 1).toCharArray()[0];
    		}
    		else{
    			userid=null;
    			password=null;
    			JOptionPane.showMessageDialog(this,"用户名或密码错误,请重新填写",
    					"警告",JOptionPane.WARNING_MESSAGE);
    			rs.close();
    			DBm.closeDB();
    			return '0';
    		}
    	}
    	private static void dispResultSet(ResultSet rs) throws SQLException
    	{
    		ResultSetMetaData rsmd=rs.getMetaData();
    		int numCols=rsmd.getColumnCount();
    		info=new String[numCols];
    		while(rs.next())
    		{
    			for(int i=1;i<=numCols;i++)
    			{				
    				info[i-1]=rs.getString(i);
    				if(i>1)System.out.print(",");
    				System.out.print(rs.getString(i));
    			}
    			System.out.println("");
    		}
    	}
    	public void reset()
    	{
    		t1.setText(null);
    		t2.setText(null);
    		t1.requestFocusInWindow();
    	}
    }
    展开全文
    m0_49113107 2021-12-24 22:49:02
  • axiebuzhen 2019-01-04 11:55:23
  • 4星
    5.94MB weixin_43165742 2019-07-21 09:34:11
  • 6.99MB qq_43631268 2020-06-01 16:48:53
  • weixin_32535825 2021-05-24 07:22:19
  • 76KB wjadcb 2017-03-10 17:52:44
  • 8.59MB u011138730 2013-06-20 20:01:26
  • iiiiitms 2020-05-03 07:16:21
  • 3星
    1.98MB wangshang4133 2017-11-26 16:45:08
  • 3.98MB yi122144453 2020-03-05 18:14:55
  • 5星
    42KB dong3526089 2009-12-30 19:53:42
  • 3星
    566KB pinkriverside 2017-02-25 15:00:11
  • qq_35960743 2021-07-12 00:56:09
  • weixin_39709134 2021-10-13 21:40:17
  • 4星
    322KB x1r2p3 2013-01-07 08:19:45
  • weixin_45800653 2020-08-12 12:35:50
  • hrbust_cxl 2020-06-10 03:05:13
  • qq_44140450 2020-12-18 21:51:46
  • 1.92MB xpbeatyou 2011-06-14 15:27:30
  • weixin_39843677 2021-05-19 11:12:49
  • 825KB qq_26975307 2019-12-29 21:55:52

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,773
精华内容 2,309
关键字:

学生选修课信息管理系统