机房收费系统---多表操作

在进行机房收费系统的时候,里面有不少的操作。需要同时操作多个数据库。

比如,用户的注册操作。在用户注册的同时,分别执行两个操作。

1.把用户的信息写入到学生信息表

2.把用户的充值信息写入到数据库的充值记录表中

面对同一个操作,进行多步数据库的操作。有两种可行方案:

第一:

进行充值操作的时候,需要把充值信息写入到充值记录表,也要把学生信息的金额数进行更改。

Private Sub cmdSave_Click()
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrc As ADODB.Recordset
 
    If testNull(txtCardNo.Text) Then
        MsgBox "卡号不允许为空!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
        Exit Sub
    End If
    
    If Not IsNumeric(Trim(txtCardNo.Text)) Then
        MsgBox "卡号请输入数字!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
        Exit Sub
    End If
    
    '检验卡号是否重复
    txtSQL = "select * from student_Info where cardno='" & txtCardNo.Text & "'" & "and status='使用'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    If mrc.BOF = False Then
        MsgBox "卡号已经存在,请重新输入!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
        Exit Sub
    End If
    
    
    If testNull(txtStudentNo.Text) Then
        MsgBox "学号不允许为空!", vbOKOnly + vbExclamation, "警告"
        txtStudentNo.SetFocus
        Exit Sub
    End If
     
    If Not IsNumeric(Trim(txtStudentNo.Text)) Then
        MsgBox "学号必须为数字!", vbOKOnly + vbExclamation, "警告"
        txtStudentNo.SetFocus
        Exit Sub
    End If
    
    '检验 学号 是否重复
    txtSQL = "select * from student_Info where studentno='" & txtStudentNo.Text & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    If mrc.EOF = False Then
        MsgBox "此学号已被使用!", vbOKOnly + vbExclamation, "警告"
        txtStudentNo.SetFocus
        Exit Sub
    End If
    
    
    '以下 为验证 其他信息的限制
    If testNull(txtName.Text) Then
        MsgBox "姓名不能为空!", vbOKOnly + vbExclamation, "警告"
        txtName.SetFocus
        Exit Sub
    End If
    
    If testNull(txtCollege.Text) Then
        MsgBox "学院不能为空!", vbOKOnly + vbExclamation, "警告"
        txtCollege.SetFocus
        Exit Sub
    End If
    
    If testNull(txtMajor.Text) Then
        MsgBox "专业不能为空!", vbOKOnly + vbExclamation, "警告"
        txtMajor.SetFocus
        Exit Sub
    End If
    
    If testNull(txtGrade.Text) Then
        MsgBox "年级不能为空!", vbOKOnly + vbExclamation, "警告"
        txtGrade.SetFocus
        Exit Sub
    End If
    
    If testNull(txtClass.Text) Then
        MsgBox "班级不能为空!", vbOKOnly + vbExclamation, "警告"
        txtClass.SetFocus
        Exit Sub
    End If
    
    If testNull(txtCash.Text) Then
        MsgBox "请输入金额!", vbOKOnly + vbExclamation, "警告"
        txtCash.SetFocus
        Exit Sub
    End If
    
    If Val(txtCash.Text) < 5 Then
        MsgBox "注册用户最少需要5元", vbOKOnly + vbExclamation, "警告"
        txtCash.SetFocus
        Exit Sub
    End If
    
    '用户填写的信息检查  没有错误,现在可以进行登记信息了
    txtSQL = "select * from student_Info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    
    mrc.AddNew
    mrc.Fields(0) = Trim(txtCardNo.Text)
    mrc.Fields(1) = Trim(txtStudentNo.Text)
    mrc.Fields(2) = Trim(txtName.Text)
    mrc.Fields(3) = Trim(cboSex.Text)
    mrc.Fields(4) = Trim(txtCollege.Text)
    mrc.Fields(5) = Trim(txtMajor.Text)
    mrc.Fields(6) = Trim(txtGrade.Text)
    mrc.Fields(7) = Trim(txtClass.Text)
    mrc.Fields(8) = Trim(txtCash.Text)
    mrc.Fields(9) = Trim(txtExplain.Text)
    mrc.Fields(10) = UserID
    mrc.Fields(11) = Trim(cboStatus.Text)
    mrc.Fields(12) = "未结账"
    mrc.Fields(13) = Trim(Date)
    mrc.Fields(14) = Trim(Time)
    
    mrc.Update
    mrc.Close
    
    '用户注册的时候同时也进行了充值。所以需要把充值信息  保存到 充值信息Recharge表中
    txtSQL = "select * from Recharge_Info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    mrc.AddNew
    mrc.Fields(1) = Trim(txtStudentNo.Text)
    mrc.Fields(2) = Trim(txtCardNo.Text)
    mrc.Fields(3) = Trim(txtCash.Text)
    mrc.Fields(4) = Trim(Date)
    mrc.Fields(5) = Trim(Time)
    mrc.Fields(6) = UserID
    mrc.Fields(7) = "未结账"
    
    mrc.Update
    mrc.Close
    
    MsgBox "学生注册成功!", vbOKOnly + vbExclamation, "注册成功"
    
    Unload Me
End Sub

 

第二:

进行登记的时候,把用户的信息,直接写入一张数据表中,然后再把数据表分别写入到其他的表中。

Private Sub cmdOk_Click()
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrc As ADODB.Recordset          '用于记录学生信息表的结果集
    Dim mrcc As ADODB.Recordset         '用于记录充值记录表 的结果集
    Dim oldCash As Variant
    Dim newCash As Variant
    
    If testNull(txtCardNo.Text) Then
        MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    
    '首先检查,输入的卡号是否  注册
    txtSQL = "select * from student_Info where cardNo='" & txtCardNo.Text & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    If mrc.BOF Then
        MsgBox "这个卡号未被注册!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    
    '对充值金额的要求 限定
    If testNull(txtCash.Text) Then
        MsgBox "请输入充值金额!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    
    If Val(txtCash.Text) < 5 Then
        MsgBox "充值金额最少为5元!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If
    
    txtSQL = "select * from Recharge_Info"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)
    
    '把充值的信息 写入 充值信息表中。用于做记录
    mrcc.AddNew
    mrcc.Fields(1) = mrc.Fields(1)
    mrcc.Fields(2) = mrc.Fields(0)
    mrcc.Fields(3) = Trim(txtCash.Text)
    mrcc.Fields(4) = Trim(Date)
    mrcc.Fields(5) = Trim(Time)
    mrcc.Fields(6) = UserID           ’操作人的姓名
    mrcc.Fields(7) = "未结账"
    mrcc.Update
    mrcc.Close
    
    '更新student表,把学生 卡上的钱数更改
    oldCash = mrc.Fields(8)             '把学生充值前的  钱取出来
    mrc.Fields(8) = oldCash + txtCash.Text
    newCash = mrc.Fields(8)             '把学生充值后的  钱取出来
    mrc.Update
    mrc.Close
    
    
    '把冲值后的信息显示出来
    rcCardNo.Text = txtCardNo.Text
    rcOldCash.Text = oldCash
    rcNewCash.Text = newCash
    rcDate.Text = Date
    rcTime.Text = Time
    rcTeacher.Text = UserID
    
    MsgBox "充值成功!", vbOKOnly + vbExclamation, "提示"
End Sub

对于这两种操作的效率问题,有待深入研究


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
下面是一个简单的机房收费管理系统的顺序表实现,使用了结构体嵌套和动态内存分配。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME_LEN 20 // 姓名最大长度 #define MAX_RECORDS 1000 // 最大记录数 // 学生信息结构体 typedef struct { char name[MAX_NAME_LEN]; int id; int minutes; } Student; // 学生记录结构体 typedef struct { Student *students; int count; int capacity; } Record; // 初始化学生记录 void initRecord(Record *record) { record->students = malloc(MAX_RECORDS * sizeof(Student)); record->count = 0; record->capacity = MAX_RECORDS; } // 添加学生记录 void addStudent(Record *record, char *name, int id, int minutes) { if (record->count == record->capacity) { printf("Error: record is full.\n"); return; } Student *student = &record->students[record->count]; strncpy(student->name, name, MAX_NAME_LEN); student->id = id; student->minutes = minutes; record->count++; } // 删除学生记录 void deleteStudent(Record *record, int id) { int i, j; for (i = 0; i < record->count; i++) { if (record->students[i].id == id) { for (j = i; j < record->count - 1; j++) { record->students[j] = record->students[j + 1]; } record->count--; return; } } printf("Error: student not found.\n"); } // 查询学生记录 void queryStudent(Record *record, int id) { int i; for (i = 0; i < record->count; i++) { if (record->students[i].id == id) { printf("Name: %s\n", record->students[i].name); printf("ID: %d\n", record->students[i].id); printf("Minutes: %d\n", record->students[i].minutes); return; } } printf("Error: student not found.\n"); } // 主函数 int main() { Record record; initRecord(&record); int choice, id, minutes; char name[MAX_NAME_LEN]; do { printf("1. Add student record\n"); printf("2. Delete student record\n"); printf("3. Query student record\n"); printf("4. Quit\n"); printf("Enter your choice: "); scanf("%d", &choice); switch (choice) { case 1: printf("Enter name: "); scanf("%s", name); printf("Enter ID: "); scanf("%d", &id); printf("Enter minutes: "); scanf("%d", &minutes); addStudent(&record, name, id, minutes); break; case 2: printf("Enter ID: "); scanf("%d", &id); deleteStudent(&record, id); break; case 3: printf("Enter ID: "); scanf("%d", &id); queryStudent(&record, id); break; case 4: break; default: printf("Error: invalid choice.\n"); break; } } while (choice != 4); return 0; } ``` 该程序实现了三个基本操作:添加、删除和查询学生记录,以及一个退出选项。其中学生信息包括姓名、学号和使用机房的时间(分钟)。顺序表记录了所有学生的信息,最多可以保存1000个记录。在添加、删除和查询学生记录时,程序会搜索顺序表,根据学号进行操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值