⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 学生选课系统
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Menus, Grids, DBGrids, DB, DBTables, StdCtrls, ExtCtrls, DBCtrls,
  ComCtrls;

type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    NAllStudents: TMenuItem;
    NAStudent: TMenuItem;
    NAddStudent: TMenuItem;
    NDelStudent: TMenuItem;
    NAllCourses: TMenuItem;
    NACourse: TMenuItem;
    NAddCourse: TMenuItem;
    NDelCourse: TMenuItem;
    NAllCS: TMenuItem;
    NDoCS: TMenuItem;
    NUnDoCS: TMenuItem;
    NCbyS: TMenuItem;
    NSbyC: TMenuItem;
    DataSource1: TDataSource;
    DBGrid1: TDBGrid;
    Database1: TDatabase;
    Table_S: TTable;
    QueryC_S: TQuery;
    Table_SSID: TStringField;
    Table_SSname: TStringField;
    Table_SCCount: TSmallintField;
    Table_C: TTable;
    Table_CCID: TStringField;
    Table_CCname: TStringField;
    Table_CSCount: TSmallintField;
    Label1: TLabel;
    QueryC_SSID: TStringField;
    QueryC_SSname: TStringField;
    QueryC_SCID: TStringField;
    QueryC_SCname: TStringField;
    TableC_S: TTable;
    StatusBar1: TStatusBar;
    procedure NAllStudentsClick(Sender: TObject);
    procedure NAllCoursesClick(Sender: TObject);
    procedure NAllCSClick(Sender: TObject);
    procedure NAStudentClick(Sender: TObject);
    procedure NACourseClick(Sender: TObject);
    procedure NAddStudentClick(Sender: TObject);
    procedure NAddCourseClick(Sender: TObject);
    procedure NDoCSClick(Sender: TObject);
    procedure NCbySClick(Sender: TObject);
    procedure NSbyCClick(Sender: TObject);
    procedure NDelStudentClick(Sender: TObject);
    procedure NDelCourseClick(Sender: TObject);
    procedure NUnDoCSClick(Sender: TObject);
  private
    { Private declarations }
    procedure SetStatusBar(DataSet:TDataSet);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

//根据数据集控件设置状态栏
procedure TForm1.SetStatusBar(DataSet:TDataSet);
var
  count:integer;
begin
  count:=DataSet.RecordCount;
  if count=0 then
    StatusBar1.Panels[1].Text:='目前该表中没有记录'
  else
    StatusBar1.Panels[1].Text:='目前该表中共有记录'+inttostr(count)+'条';
end;

procedure TForm1.NAllStudentsClick(Sender: TObject);
begin
//显示所有学生列表
  Label1.Caption:='所有学生列表';
  Table_S.Filtered:=false;
  Table_S.Refresh;
  DataSource1.DataSet:=Table_S;
  if Table_S.RecordCount=0 then
    showmessage('目前没有任何学生!');
//设置状态栏
  SetStatusBar(Table_S);
end;

procedure TForm1.NAllCoursesClick(Sender: TObject);
begin
//显示所有课程列表
  Label1.Caption:='所有课程列表';
  Table_C.Filtered:=false;
  Table_C.Refresh;
  DataSource1.DataSet:=Table_C;
  if Table_S.RecordCount=0 then
    showmessage('目前没有任何课程');
  SetStatusBar(Table_C);
end;

procedure TForm1.NAllCSClick(Sender: TObject);
begin
//显示所有选课列表
  Label1.Caption:='所有选课列表';
  QueryC_S.Filtered:=false;
  QueryC_S.Close;
  QueryC_S.Open;
  DataSource1.DataSet:=QueryC_S;
  if QueryC_S.RecordCount=0 then
    showmessage('目前没有任何选课记录');
//设置状态栏
  SetStatusBar(QueryC_S);
end;

procedure TForm1.NAStudentClick(Sender: TObject);
var
  SID:string;
begin
//查询单个学生
  SID:='';
  SID:=inputBox('学生查询','请输入要查询的学生的学号好吗','');
  if SID<>'' then
    begin
      Label1.Caption:='学生学号为'''+SID+'''的情况';
      Table_S.Filter:='SID='''+SID+'''';
      Table_S.Filtered:=True;
      if Table_S.RecordCount=0 then
        begin
          showmessage('查无此人');
        end;
    end
  else
    showmessage('没有查询学生');
//设置状态栏
  SetStatusBar(Table_S);
end;

procedure TForm1.NDelStudentClick(Sender: TObject);
var
  SID:string;
begin
//删除一个学生
  SID:='';
  SID:=inputBox('删除学生','请输入要删除的学生的学号好吗','');
  if SID<>'' then
    begin
      //查找该学生
      Table_S.Filter:='SID='''+SID+'''';
      Table_S.Filtered:=True;
      if Table_S.RecordCount=0 then
          showmessage('删除失败,查无此人!')
      else
      //察看该学生读课信息
      if Table_S.FieldByName('CCount').AsInteger>0 then
          showmessage('删除失败,此人还有课程在读!')
      else
          Table_S.Delete;
    end
  else
      showmessage('没有删除学生');
//最后显示所有学生列表
  NAllStudents.Click;
end;

procedure TForm1.NDelCourseClick(Sender: TObject);
var
  CID:string;
begin
//删除一门课程
  CID:='';
  CID:=inputBox('删除课程','请输入要删除的课程编号好吗','');
  if CID<>'' then
    begin
      //查找该课程
      Table_C.Filter:='CID='''+CID+'''';
      Table_C.Filtered:=True;
      if Table_C.RecordCount=0 then
          showmessage('删除失败,查无此课!')
      else
      //察看该课程选课人数
      if Table_C.FieldByName('SCount').AsInteger>0 then
        showmessage('删除失败,此课程还有学生在读!')
      else
      //删除
        Table_C.Delete;
    end
  else
    showmessage('没有删除课程');
//最后显示所有课程列表
  NAllCourses.Click;
end;


procedure TForm1.NACourseClick(Sender: TObject);
var
  CID:string;
begin
//查询一门课程
  CID:='';
  CID:=inputBox('课程查询','请输入要查询的课程编号好吗','');
  if CID<>'' then
    begin
      Label1.Caption:='课程编号为'''+CID+'''的情况';
      Table_C.Filter:='CID='''+CID+'''';
      Table_C.Filtered:=True;
      if Table_C.RecordCount=0 then
        showmessage('查无此课');
    end
  else
    showmessage('没有查询课程');
//设置状态栏
  SetStatusBar(Table_C);
end;

procedure TForm1.NCbySClick(Sender: TObject);
var
  SID:string;
begin
//根据学生查他的选课情况
  SID:='';
  SID:=inputBox('请输入学号','请输入要查询的学生的学号好吗','');
  if SID<>'' then
    begin
      Table_S.Filter:='SID='''+SID+'''';
      Table_S.Filtered:=true;
      if Table_S.RecordCount=0 then
        showmessage('查无此人')
      else
        begin
          Label1.Caption:='学生学号为'''+SID+'''的选课情况';
          QueryC_S.Filter:='SID='''+SID+'''';
          QueryC_S.Filtered:=True;
          DataSource1.DataSet:=QueryC_S;
          if QueryC_S.RecordCount=0 then
            showmessage('该生没有选课');
        end;
    end
  else
    showmessage('没有查询');
//设置状态栏
  SetStatusBar(QueryC_S);
end;

procedure TForm1.NSbyCClick(Sender: TObject);
var
  CID:string;
begin
//根据课程查该课程的选课情况
  CID:='';
  CID:=inputBox('请输入课程编号','请输入要查询的课程编号好吗','');
  if CID<>'' then
    begin
      Table_C.Filter:='CID='''+CID+'''';
      Table_C.Filtered:=true;
      if Table_C.RecordCount=0 then
        showmessage('查无此课')
      else
        begin
          Label1.Caption:='课程编号为'''+CID+'''的选课情况';
          QueryC_S.Filter:='CID='''+CID+'''';
          QueryC_S.Filtered:=True;
          DataSource1.DataSet:=QueryC_S;
          if QueryC_S.RecordCount=0 then
            showmessage('该课没有人选');
        end;
    end
  else
    showmessage('没有查询');
//设置状态栏
  SetStatusBar(QueryC_S);
end;

//增加一个学生
procedure TForm1.NAddStudentClick(Sender: TObject);
var
  SID, Sname:string;
begin
//设置输入框
  Form2.Caption:='增加学生';
  Form2.Label1.Caption:='请输入学生信息';
  Form2.Label2.Caption:='学生学号';
  Form2.Label3.Caption:='学生姓名';
//弹出输入框并返回信息
  if Form2.ShowModal=mrOK then
    begin
      //查找该生是否已经存在
      SID:=Form2.Edit1.Text;
      Sname:=Form2.Edit2.Text;
      Table_S.Filter:='SID='''+SID+'''';
      Table_S.Filtered:=True;
      if Table_S.RecordCount>0 then
        showmessage('该学生已经存在!')
      else	//不存在则添加
        Table_S.AppendRecord([SID,Sname,0]);
    end;
//最后显示所有学生列表
  NAllStudents.Click;
end;

//增加一门课程
procedure TForm1.NAddCourseClick(Sender: TObject);
var
  CID, Cname:string;
begin
//设置输入框
  Form2.Caption:='增加课程';
  Form2.Label1.Caption:='请输入课程信息';
  Form2.Label2.Caption:='课程编号';
  Form2.Label3.Caption:='课程名称';
//弹出输入框并返回信息
  if Form2.ShowModal=mrOK then
    begin
      //查找该课是否已经存在
      CID:=Form2.Edit1.Text;
      Cname:=Form2.Edit2.Text;
      Table_C.Filter:='CID='''+CID+'''';
      Table_C.Filtered:=True;
      if Table_C.RecordCount>0 then
          showmessage('该课程已经存在!')
      else	//不存在则添加
          Table_C.AppendRecord([CID,Cname,0]);
    end;
//最后显示所有课程列表
  NAllCourses.Click;
end;

//选课
procedure TForm1.NDoCSClick(Sender: TObject);
var
  SID, CID:string;
  count:integer;
begin
//设置输入框
  Form2.Caption:='选课';
  Form2.Label1.Caption:='请输入选课信息';
  Form2.Label2.Caption:='学生学号';
  Form2.Label3.Caption:='课程编号';
//弹出输入框并返回信息
  if Form2.ShowModal=mrOK then
    begin
      SID:=Form2.Edit1.Text;
      CID:=Form2.Edit2.Text;
      //查找该生是否存在
      Table_S.Filter:='SID='''+SID+'''';
      Table_S.Filtered:=true;
      if Table_S.RecordCount=0 then
        begin
          showmessage('查无此人!');
          exit;
        end;
      //查找该课是否存在
      Table_C.Filter:='CID='''+CID+'''';
      Table_C.Filtered:=true;
      if Table_C.RecordCount=0 then
        begin
          showmessage('查无此课!');
          exit;
        end;
      //查找是否该生已经选了该课程
      QueryC_S.Filter:='CID='''+CID+''' and SID='''+SID+'''';
      QueryC_S.Filtered:=true;
      if QueryC_S.RecordCount>0 then
        showmessage('该生已选该课!')
      else
        begin
          //增加选课
          TableC_S.AppendRecord([CID,SID]);
	  //设置Students表的选课数目
          count:=Table_S.FieldByName('CCount').AsInteger;
          Table_S.Edit;
          Table_S.FieldByName('CCount').AsInteger:=count+1;
          Table_S.Post;
          //设置Course表的选课数目
          count:=Table_C.FieldByName('SCount').AsInteger;
          Table_C.Edit;
          Table_C.FieldByName('SCount').AsInteger:=count+1;
          Table_C.Post;
        end;
    end
  else
    showmessage('没有选课');
//最后显示所有选课情况
  NAllCS.Click;
end;

//退课
procedure TForm1.NUnDoCSClick(Sender: TObject);
var
  SID, CID:string;
  count:integer;
begin
//设置输入框
  Form2.Caption:='退课';
  Form2.Label1.Caption:='请输入退课课信息';
  Form2.Label2.Caption:='学生学号';
  Form2.Label3.Caption:='课程编号';
//弹出输入框并返回信息
  if Form2.ShowModal=mrOK then
    begin
      SID:=Form2.Edit1.Text;
      CID:=Form2.Edit2.Text;
      //查找该生是否存在
      Table_S.Filter:='SID='''+SID+'''';
      Table_S.Filtered:=true;
      if Table_S.RecordCount=0 then
        begin
          showmessage('查无此人!');
          exit;
        end;
      //查找该课是否存在
      Table_C.Filter:='CID='''+CID+'''';
      Table_C.Filtered:=true;
      if Table_C.RecordCount=0 then
        begin
          showmessage('查无此课!');
          exit;
        end;
      //查找是否该生已经选了该课程
      QueryC_S.Filter:='CID='''+CID+''' and SID='''+SID+'''';
      QueryC_S.Filtered:=true;
      if QueryC_S.RecordCount=0 then
        showmessage('该生未选该课!')
      else
        begin
          //删除该选课信息
          TableC_S.Filter:='CID='''+CID+''' and SID='''+SID+'''';
          TableC_S.Filtered:=true;
          TableC_S.Delete;
	  //更新Students表中的选课数目
          count:=Table_S.FieldByName('CCount').AsInteger;
          Table_S.Edit;
          Table_S.FieldByName('CCount').AsInteger:=count-1;
          Table_S.Post;
          if Table_S.FieldByName('CCount').AsInteger=0 then
            showmessage('此人已经没有任何课程在读');
  	  //更新Course表中的选课人数
          count:=Table_C.FieldByName('SCount').AsInteger;
          Table_C.Edit;
          Table_C.FieldByName('SCount').AsInteger:=count-1;
          Table_C.Post;
          if Table_C.FieldByName('SCount').AsInteger=0 then
            showmessage('此课已经没有任何人在读');
        end;
    end;
//最后显示所有选课情况
  NAllCS.Click;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -