├── .gitignore ├── Lab ├── Lab1 │ ├── 87-1190200208-李旻翀-实验1.docx │ ├── 87-1190200208-李旻翀-实验1.pdf │ ├── college.sql │ ├── lab1.pdf │ └── product.sql ├── Lab2 │ ├── 87-1190200208-李旻翀-实验2-buffer.cpp │ ├── 87-1190200208-李旻翀-实验2.docx │ ├── 87-1190200208-李旻翀-实验2.pdf │ └── lab2.pdf ├── Lab3 │ ├── 87-1190200208-李旻翀-实验3-源代码.zip │ ├── 87-1190200208-李旻翀-实验3.docx │ ├── 87-1190200208-李旻翀-实验3.pdf │ ├── Lab3 │ │ ├── .idea │ │ │ ├── .gitignore │ │ │ ├── .name │ │ │ ├── Lab3.iml │ │ │ ├── inspectionProfiles │ │ │ │ └── profiles_settings.xml │ │ │ ├── misc.xml │ │ │ └── modules.xml │ │ ├── Ui_SCT_2.py │ │ ├── __pycache__ │ │ │ └── Ui_SCT_2.cpython-38.pyc │ │ ├── gen_data.py │ │ ├── gen_data.xls │ │ ├── icons │ │ │ ├── 14372724_p0.jpg │ │ │ ├── class.png │ │ │ ├── classroom.png │ │ │ ├── course.png │ │ │ ├── course_transcript.png │ │ │ ├── department.png │ │ │ ├── sc.png │ │ │ ├── sc_score.png │ │ │ ├── student.png │ │ │ ├── student_transcript.png │ │ │ ├── teacher.png │ │ │ ├── tt.png │ │ │ └── ttr.png │ │ ├── launcher.py │ │ ├── sct_lmc_2.sql │ │ ├── sct_lmc_final.sql │ │ ├── sms.ui │ │ └── sms_test.py │ └── lab3.pdf ├── Lab4 │ ├── 87-1190200208-李旻翀-实验4-executor.cpp │ ├── 87-1190200208-李旻翀-实验4.docx │ ├── 87-1190200208-李旻翀-实验4.pdf │ └── lab4.pdf └── 数据库系统实验报告模板.docx ├── README.md ├── homework ├── 87-1190200208-李旻翀-作业1.pdf ├── 87-1190200208-李旻翀-作业2.pdf ├── 87-1190200208-李旻翀-作业3.pdf ├── assignment1-answers.pdf ├── assignment1.pdf ├── assignment2.pdf └── assignment3.pdf ├── 《数据库系统》考试复习范围.pdf └── 往年题 └── 2020春《数据库系统》期末试题C-v1.2.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | /PPT 2 | ! README.md -------------------------------------------------------------------------------- /Lab/Lab1/87-1190200208-李旻翀-实验1.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab1/87-1190200208-李旻翀-实验1.docx -------------------------------------------------------------------------------- /Lab/Lab1/87-1190200208-李旻翀-实验1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab1/87-1190200208-李旻翀-实验1.pdf -------------------------------------------------------------------------------- /Lab/Lab1/college.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE Student ( 2 | Sno CHAR(6) PRIMARY KEY, 3 | Sname VARCHAR(10) NOT NULL, 4 | Ssex CHAR CHECK (Ssex IN ('M', 'F')), 5 | Sage INT CHECK (Sage > 0), 6 | Sdept VARCHAR(20) 7 | ); 8 | 9 | INSERT INTO Student 10 | VALUES 11 | ('PH-001', 'Nick', 'M', 20, 'Physics'), 12 | ('CS-001', 'Elsa', 'F', 19, 'CS'), 13 | ('CS-002', 'Ed', 'M', 19, 'CS'), 14 | ('MA-001', 'Abby', 'F', 18, 'Math'), 15 | ('MA-002', 'Cindy', 'F', 19, 'Math') 16 | ; 17 | 18 | 19 | CREATE TABLE Course (Cno CHAR(4) PRIMARY KEY); 20 | 21 | INSERT INTO Course 22 | VALUES 23 | ('1002'), 24 | ('2003'), 25 | ('3006') 26 | ; 27 | 28 | CREATE TABLE SC ( 29 | Sno CHAR(6), 30 | Cno CHAR(4), 31 | Grade INT, 32 | PRIMARY KEY (Sno, Cno), 33 | FOREIGN KEY (Sno) REFERENCES Student(Sno), 34 | FOREIGN KEY (Cno) REFERENCES Course(Cno) 35 | ); 36 | 37 | INSERT INTO SC 38 | VALUES 39 | ('PH-001', '1002', 92), 40 | ('PH-001', '2003', 85), 41 | ('PH-001', '3006', 88), 42 | ('CS-001', '1002', 95), 43 | ('CS-001', '3006', 90), 44 | ('CS-002', '3006', 80), 45 | ('MA-001', '1002', NULL) 46 | ; 47 | -------------------------------------------------------------------------------- /Lab/Lab1/lab1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab1/lab1.pdf -------------------------------------------------------------------------------- /Lab/Lab1/product.sql: -------------------------------------------------------------------------------- 1 | 2 | 3 | CREATE TABLE Product 4 | (`maker` varchar(1), `model` int, `type` varchar(7)) 5 | ; 6 | 7 | INSERT INTO Product 8 | (`maker`, `model`, `type`) 9 | VALUES 10 | ('A', 1001, 'pc'), 11 | ('A', 1002, 'pc'), 12 | ('A', 1003, 'pc'), 13 | ('A', 2004, 'laptop'), 14 | ('A', 2005, 'laptop'), 15 | ('A', 2006, 'laptop'), 16 | ('B', 1004, 'pc'), 17 | ('B', 1005, 'pc'), 18 | ('B', 1006, 'pc'), 19 | ('B', 2007, 'laptop'), 20 | ('C', 1007, 'pc'), 21 | ('D', 1008, 'pc'), 22 | ('D', 1009, 'pc'), 23 | ('D', 1010, 'pc'), 24 | ('D', 3004, 'printer'), 25 | ('D', 3005, 'printer'), 26 | ('E', 1011, 'pc'), 27 | ('E', 1012, 'pc'), 28 | ('E', 1013, 'pc'), 29 | ('E', 2001, 'laptop'), 30 | ('E', 2002, 'laptop'), 31 | ('E', 2003, 'laptop'), 32 | ('E', 3001, 'printer'), 33 | ('E', 3002, 'printer'), 34 | ('E', 3003, 'printer'), 35 | ('F', 2008, 'laptop'), 36 | ('F', 2009, 'laptop'), 37 | ('G', 2010, 'laptop'), 38 | ('H', 3006, 'printer'), 39 | ('H', 3007, 'printer') 40 | ; 41 | 42 | 43 | CREATE TABLE PC 44 | (`model` int, `speed` float, `ram` int, `hd` int, `price` int) 45 | ; 46 | 47 | INSERT INTO PC 48 | (`model`, `speed`, `ram`, `hd`, `price`) 49 | VALUES 50 | (1001, 2.66, 1024, 250, 2114), 51 | (1002, 2.1, 512, 250, 995), 52 | (1003, 1.42, 512, 80, 478), 53 | (1004, 2.8, 1024, 250, 649), 54 | (1005, 3.2, 512, 250, 630), 55 | (1006, 3.2, 1024, 320, 1049), 56 | (1007, 2.2, 1024, 200, 510), 57 | (1008, 2.2, 2048, 250, 770), 58 | (1009, 2, 1024, 250, 650), 59 | (1010, 2.8, 2048, 300, 770), 60 | (1011, 1.86, 2048, 160, 959), 61 | (1012, 2.8, 1024, 160, 649), 62 | (1013, 3.06, 512, 80, 529) 63 | ; 64 | 65 | 66 | CREATE TABLE Laptop 67 | (`model` int, `speed` float, `ram` int, `hd` int, `screen` float, `price` int) 68 | ; 69 | 70 | INSERT INTO Laptop 71 | (`model`, `speed`, `ram`, `hd`, `screen`, `price`) 72 | VALUES 73 | (2001, 2, 2048, 240, 20.1, 3673), 74 | (2002, 1.73, 1024, 80, 17, 949), 75 | (2003, 1.8, 512, 60, 15.4, 549), 76 | (2004, 2, 512, 60, 13.3, 1150), 77 | (2005, 2.16, 1024, 120, 17, 2500), 78 | (2006, 2, 2048, 80, 15.4, 1700), 79 | (2007, 1.83, 1024, 120, 13.3, 1429), 80 | (2008, 1.6, 1024, 100, 15.4, 900), 81 | (2009, 1.6, 512, 80, 14.1, 680), 82 | (2010, 2, 2048, 160, 15.4, 2300) 83 | ; 84 | 85 | 86 | CREATE TABLE Printer 87 | (`model` int, `color` varchar(5), `type` varchar(7), `price` int) 88 | ; 89 | 90 | INSERT INTO Printer 91 | (`model`, `color`, `type`, `price`) 92 | VALUES 93 | (3001, 'true', 'ink-jet', 99), 94 | (3002, 'false', 'laser', 239), 95 | (3003, 'true', 'laser', 899), 96 | (3004, 'true', 'ink-jet', 120), 97 | (3005, 'false', 'laser', 120), 98 | (3006, 'true', 'ink-jet', 100), 99 | (3007, 'true', 'laser', 200) 100 | ; 101 | 102 | -------------------------------------------------------------------------------- /Lab/Lab2/87-1190200208-李旻翀-实验2-buffer.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * @author See Contributors.txt for code contributors and overview of BadgerDB. 3 | * 4 | * @section LICENSE 5 | * Copyright (c) 2012 Database Group, Computer Sciences Department, University of Wisconsin-Madison. 6 | */ 7 | 8 | #include 9 | #include 10 | #include "buffer.h" 11 | #include "exceptions/buffer_exceeded_exception.h" 12 | #include "exceptions/page_not_pinned_exception.h" 13 | #include "exceptions/page_pinned_exception.h" 14 | #include "exceptions/bad_buffer_exception.h" 15 | #include "exceptions/hash_not_found_exception.h" 16 | 17 | namespace badgerdb 18 | { 19 | 20 | BufMgr::BufMgr(std::uint32_t bufs) 21 | : numBufs(bufs) 22 | { 23 | bufDescTable = new BufDesc[bufs]; 24 | 25 | for (FrameId i = 0; i < bufs; i++) 26 | { 27 | bufDescTable[i].frameNo = i; 28 | bufDescTable[i].valid = false; 29 | } 30 | 31 | bufPool = new Page[bufs]; 32 | 33 | int htsize = ((((int)(bufs * 1.2)) * 2) / 2) + 1; 34 | hashTable = new BufHashTbl(htsize); // allocate the buffer hash table 35 | 36 | clockHand = bufs - 1; 37 | } 38 | 39 | // 将所有脏页写回磁盘,然后释放缓冲池、BufDesc表和哈希表占用的内存 40 | BufMgr::~BufMgr() 41 | { 42 | // 脏页全部写回磁盘 43 | for (FrameId i = 0; i < numBufs; i++) 44 | { 45 | if (bufDescTable[i].dirty && bufDescTable[i].valid) 46 | { 47 | bufDescTable[i].file->writePage(bufPool[i]); 48 | bufDescTable[i].dirty = false; 49 | } 50 | } 51 | 52 | // 按指向顺序删除,避免产生空指针 53 | delete hashTable; // 删除页表 54 | delete[] bufPool; // 删除 Buffer Pool 55 | delete[] bufDescTable; // 删除每一个页框的描述 56 | } 57 | 58 | // 顺时针旋转时钟算法中的表针,将其指向缓冲池中下一个页框 59 | void BufMgr::advanceClock() 60 | { 61 | clockHand++; 62 | if (clockHand >= numBufs) 63 | clockHand %= numBufs; 64 | } 65 | 66 | // 使用时钟算法分配一个空闲页框 67 | void BufMgr::allocBuf(FrameId &frame) 68 | { 69 | unsigned num = 0; 70 | while (true) 71 | { 72 | // 时针旋转 73 | advanceClock(); 74 | // 若当前页框不包含有效页面,则直接分配它 75 | if (!bufDescTable[clockHand].valid) 76 | { 77 | frame = clockHand; 78 | return; 79 | } 80 | // 若当前页面引用位为true 81 | if (bufDescTable[clockHand].refbit) 82 | { 83 | bufDescTable[clockHand].refbit = false; 84 | continue; 85 | } 86 | // 若当前页面 pinCnt 不为 0 87 | if (bufDescTable[clockHand].pinCnt) 88 | { 89 | num++; 90 | if (num == numBufs) // 若缓冲池中所有页框都被pin,则抛出BufferExceededException异常 91 | throw BufferExceededException(); 92 | else 93 | continue; 94 | } 95 | // 该页框引用位为false,pinCnt 为 0 96 | frame = clockHand; 97 | // 若页框中的页面是脏的,则需先将脏页写回磁盘 98 | if (bufDescTable[clockHand].dirty) 99 | { 100 | bufDescTable[clockHand].dirty = false; 101 | bufDescTable[clockHand].file->writePage(bufPool[clockHand]); 102 | } 103 | // 如果被分配的页框中包含一个有效页面,则必须将该页面从页表中删除 104 | if (bufDescTable[clockHand].valid) 105 | { 106 | try 107 | { 108 | hashTable->remove(bufDescTable[clockHand].file, bufDescTable[clockHand].pageNo); 109 | } 110 | catch (HashNotFoundException &) 111 | { 112 | } 113 | } 114 | break; 115 | } 116 | } 117 | 118 | // 上层读取页面 119 | void BufMgr::readPage(File *file, const PageId pageNo, Page *&page) 120 | { 121 | FrameId frame_num; 122 | // 页面在缓冲池中 123 | try 124 | { 125 | hashTable->lookup(file, pageNo, frame_num); 126 | bufDescTable[frame_num].refbit = true; 127 | bufDescTable[frame_num].pinCnt++; 128 | page = frame_num + bufPool; // 通过参数page返回指向该页框的指针 129 | } 130 | // 页面不在缓冲池中 131 | catch (HashNotFoundException &) 132 | { 133 | allocBuf(frame_num); // 分配一个空闲的页框 134 | bufPool[frame_num] = file->readPage(pageNo); // 将页面从磁盘读入刚刚分配的空闲页框 135 | hashTable->insert(file, pageNo, frame_num); // 将该页面插入哈希表 136 | bufDescTable[frame_num].Set(file, pageNo); // 调用Set()方法正确设置页框的状态 137 | page = frame_num + bufPool; // 通过参数page返回指向该页框的指针 138 | } 139 | } 140 | 141 | // 将缓冲区中包含(file, PageNo)表示的页面所在的页框的pinCnt值减1。 142 | void BufMgr::unPinPage(File *file, const PageId pageNo, const bool dirty) 143 | { 144 | FrameId frame_num; 145 | try 146 | { 147 | hashTable->lookup(file, pageNo, frame_num); 148 | } 149 | catch (HashNotFoundException &) // 如果该页面不在表中,则什么都不用做。 150 | { 151 | return; 152 | } 153 | // 该页面在表中 154 | if (bufDescTable[frame_num].pinCnt > 0) 155 | { 156 | bufDescTable[frame_num].pinCnt--; 157 | if (dirty) 158 | bufDescTable[frame_num].dirty = true; 159 | } 160 | else 161 | throw PageNotPinnedException(bufDescTable[frame_num].file->filename(), bufDescTable[frame_num].pageNo, frame_num); 162 | } 163 | 164 | // 扫描页面 165 | void BufMgr::flushFile(const File *file) 166 | { 167 | // 遍历,检索缓冲区中所有属于文件file的页面 168 | for (FrameId i = 0; i < numBufs; i++) 169 | { 170 | if (bufDescTable[i].file == file) 171 | { 172 | // 检索到文件file的某个无效页或文件file的某些页面被固定住(pinned),抛出BadBufferException异常 173 | if (!bufDescTable[i].valid) 174 | throw BadBufferException(i, bufDescTable[i].dirty, bufDescTable[i].valid, bufDescTable[i].refbit); 175 | if (bufDescTable[i].pinCnt > 0) 176 | { 177 | throw PagePinnedException(file->filename(), bufDescTable[i].pageNo, i); 178 | } 179 | // 如果页面是脏的,则调用file->writePage()将页面写回磁盘,并将dirty位置为false 180 | if (bufDescTable[i].dirty) 181 | { 182 | bufDescTable[i].file->writePage(bufPool[i]); 183 | bufDescTable[i].dirty = false; 184 | } 185 | // 将页面从哈希表中删除 186 | hashTable->remove(file, bufDescTable[i].pageNo); 187 | // 调用BufDesc类的Clear()方法将页框的状态进行重置 188 | bufDescTable[i].Clear(); 189 | } 190 | } 191 | } 192 | 193 | // 分配页面 194 | void BufMgr::allocPage(File *file, PageId &pageNo, Page *&page) 195 | { 196 | FrameId frame_num; 197 | 198 | Page new_page = file->allocatePage(); // 在file文件中分配一个空闲页面 199 | allocBuf(frame_num); // 在缓冲区中分配一个空闲的页框 200 | bufPool[frame_num] = new_page; 201 | 202 | pageNo = new_page.page_number(); // 通过pageNo参数返回新分配的页面的页号 203 | page = frame_num + bufPool; // 通过page参数返回指向缓冲池中包含该页面的页框的指针 204 | 205 | hashTable->insert(file, pageNo, frame_num); // 在哈希表中插入一条项目 206 | bufDescTable[frame_num].Set(file, pageNo); // 调用Set()方法正确设置页框的状态 207 | } 208 | 209 | // 从文件file中删除页号为pageNo的页面 210 | void BufMgr::disposePage(File *file, const PageId PageNo) 211 | { 212 | FrameId frame_num; 213 | // 若该页面在缓冲池中 214 | try 215 | { 216 | hashTable->lookup(file, PageNo, frame_num); // 寻找该页面 217 | hashTable->remove(file, PageNo); // 若找到,则从哈希表中删除该页面 218 | bufDescTable[frame_num].Clear(); // 将该页面所在的页框清空 219 | } 220 | catch (HashNotFoundException &) // 若该页面不在缓冲池中,则不做操作 221 | { 222 | } 223 | file->deletePage(PageNo); // 从file中删除该页面 224 | } 225 | 226 | void BufMgr::printSelf(void) 227 | { 228 | BufDesc *tmpbuf; 229 | int validFrames = 0; 230 | 231 | for (std::uint32_t i = 0; i < numBufs; i++) 232 | { 233 | tmpbuf = &(bufDescTable[i]); 234 | std::cout << "frameNo:" << i << " "; 235 | tmpbuf->Print(); 236 | 237 | if (tmpbuf->valid == true) 238 | validFrames++; 239 | } 240 | 241 | std::cout << "Total Number of Valid Frames:" << validFrames << "\n"; 242 | } 243 | 244 | } 245 | -------------------------------------------------------------------------------- /Lab/Lab2/87-1190200208-李旻翀-实验2.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab2/87-1190200208-李旻翀-实验2.docx -------------------------------------------------------------------------------- /Lab/Lab2/87-1190200208-李旻翀-实验2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab2/87-1190200208-李旻翀-实验2.pdf -------------------------------------------------------------------------------- /Lab/Lab2/lab2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab2/lab2.pdf -------------------------------------------------------------------------------- /Lab/Lab3/87-1190200208-李旻翀-实验3-源代码.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/87-1190200208-李旻翀-实验3-源代码.zip -------------------------------------------------------------------------------- /Lab/Lab3/87-1190200208-李旻翀-实验3.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/87-1190200208-李旻翀-实验3.docx -------------------------------------------------------------------------------- /Lab/Lab3/87-1190200208-李旻翀-实验3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/87-1190200208-李旻翀-实验3.pdf -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/.idea/.name: -------------------------------------------------------------------------------- 1 | Ui_SCT_2.py -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/.idea/Lab3.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/.idea/inspectionProfiles/profiles_settings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/__pycache__/Ui_SCT_2.cpython-38.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/__pycache__/Ui_SCT_2.cpython-38.pyc -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/gen_data.py: -------------------------------------------------------------------------------- 1 | import xlwt 2 | import numpy as np 3 | 4 | excel = xlwt.Workbook(encoding='utf-8', style_compression=0) 5 | student_sheet = excel.add_sheet('student', cell_overwrite_ok=True) 6 | sc_sheet = excel.add_sheet('sc', cell_overwrite_ok=True) 7 | student_col = ('s_id', 'cl_id', 's_name', 's_sex', 's_age', 's_tel') 8 | sc_col = ('s_id', 'c_id', 'score', 'date') 9 | 10 | for i in range(len(student_col)): 11 | student_sheet.write(0, i, student_col[i]) 12 | for i in range(len(sc_col)): 13 | sc_sheet.write(0, i, sc_col[i]) 14 | 15 | for i in range(1000): 16 | s_id = '100403' + '{:03d}'.format(i) 17 | cl_id = '100403' 18 | s_name = 'TEST' + str(i) 19 | s_sex = '男' if np.random.rand() < 0.5 else '女' 20 | s_age = np.random.randint(18, 24) 21 | s_tel = '13000000' + '{:03d}'.format(i) 22 | c_id = '130001' 23 | score = str(np.random.randint(1, 100)) 24 | date = '2022-01-01' 25 | student_list = (s_id, cl_id, s_name, s_sex, s_age, s_tel) 26 | sc_list = (s_id, c_id, score, date) 27 | for j in range(len(student_list)): 28 | student_sheet.write(i + 1, j, student_list[j]) 29 | for j in range(len(sc_list)): 30 | sc_sheet.write(i + 1, j, sc_list[j]) 31 | 32 | excel.save('./gen_data.xls') 33 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/gen_data.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/gen_data.xls -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/14372724_p0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/14372724_p0.jpg -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/class.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/class.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/classroom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/classroom.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/course.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/course_transcript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/course_transcript.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/department.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/department.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/sc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/sc.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/sc_score.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/sc_score.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/student.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/student.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/student_transcript.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/student_transcript.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/teacher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/teacher.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/tt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/tt.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/icons/ttr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/Lab3/icons/ttr.png -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/launcher.py: -------------------------------------------------------------------------------- 1 | import sys 2 | from PyQt5.QtWidgets import QApplication, QMainWindow 3 | import pymysql 4 | import Ui_SCT_2 5 | 6 | if __name__ == '__main__': 7 | app = QApplication(sys.argv) 8 | MainWindow = QMainWindow() 9 | db = pymysql.connect(host="localhost", user="root", password="Lmc1161181", database="sct") 10 | # cursor = db.cursor() 11 | ui = Ui_SCT_2.Ui_MainWindow(db) 12 | ui.setupUi(MainWindow) 13 | MainWindow.show() 14 | exec = app.exec_() 15 | db.close() 16 | sys.exit(exec) 17 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/sms.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 930 10 | 794 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | 18 | 19 | 20 | 10 21 | 20 22 | 751 23 | 191 24 | 25 | 26 | 27 | QFrame::Panel 28 | 29 | 30 | QFrame::Plain 31 | 32 | 33 | 0 34 | 35 | 36 | 37 | 38 | 39 | 100 40 | 80 41 | 131 42 | 31 43 | 44 | 45 | 46 | 47 | 48 | 49 | 100 50 | 140 51 | 131 52 | 31 53 | 54 | 55 | 56 | 57 | 58 | 59 | 600 60 | 80 61 | 131 62 | 31 63 | 64 | 65 | 66 | 67 | 68 | 69 | 340 70 | 140 71 | 131 72 | 31 73 | 74 | 75 | 76 | 77 | 78 | 79 | 600 80 | 140 81 | 131 82 | 31 83 | 84 | 85 | 86 | 87 | 88 | 89 | 40 90 | 80 91 | 51 92 | 31 93 | 94 | 95 | 96 | 97 | Microsoft YaHei UI 98 | 11 99 | 100 | 101 | 102 | 学号 103 | 104 | 105 | 106 | 107 | 108 | 40 109 | 140 110 | 51 111 | 31 112 | 113 | 114 | 115 | 116 | Microsoft YaHei UI 117 | 11 118 | 119 | 120 | 121 | 班号 122 | 123 | 124 | 125 | 126 | 127 | 270 128 | 80 129 | 51 130 | 31 131 | 132 | 133 | 134 | 135 | Microsoft YaHei UI 136 | 11 137 | 138 | 139 | 140 | 年龄 141 | 142 | 143 | 144 | 145 | 146 | 270 147 | 140 148 | 51 149 | 31 150 | 151 | 152 | 153 | 154 | Microsoft YaHei UI 155 | 11 156 | 157 | 158 | 159 | 姓名 160 | 161 | 162 | 163 | 164 | 165 | 536 166 | 80 167 | 51 168 | 31 169 | 170 | 171 | 172 | 173 | Microsoft YaHei UI 174 | 11 175 | 176 | 177 | 178 | 性别 179 | 180 | 181 | 182 | 183 | 184 | 500 185 | 140 186 | 91 187 | 31 188 | 189 | 190 | 191 | 192 | Microsoft YaHei UI 193 | 11 194 | 195 | 196 | 197 | 联系方式 198 | 199 | 200 | 201 | 202 | 203 | 340 204 | 80 205 | 131 206 | 31 207 | 208 | 209 | 210 | 211 | 212 | 213 | 0 214 | 0 215 | 751 216 | 51 217 | 218 | 219 | 220 | 221 | Microsoft YaHei UI 222 | 22 223 | 50 224 | false 225 | 226 | 227 | 228 | 学生信息 229 | 230 | 231 | Qt::AlignCenter 232 | 233 | 234 | 235 | 236 | 237 | 570 238 | 18 239 | 101 240 | 31 241 | 242 | 243 | 244 | 245 | Times New Roman 246 | 11 247 | 248 | 249 | 250 | 251 | SELECT 252 | 253 | 254 | 255 | 256 | INSERT 257 | 258 | 259 | 260 | 261 | DELETE 262 | 263 | 264 | 265 | 266 | 267 | 268 | 520 269 | 23 270 | 41 271 | 21 272 | 273 | 274 | 275 | 276 | Microsoft YaHei UI 277 | 11 278 | 279 | 280 | 281 | 操作 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 4 290 | 80 291 | 81 292 | 31 293 | 294 | 295 | 296 | 297 | Microsoft YaHei UI 298 | 11 299 | 300 | 301 | 302 | 教师编号 303 | 304 | 305 | 306 | 307 | 308 | 100 309 | 80 310 | 131 311 | 31 312 | 313 | 314 | 315 | 316 | 317 | 318 | 100 319 | 140 320 | 131 321 | 31 322 | 323 | 324 | 325 | 326 | 327 | 328 | 40 329 | 140 330 | 41 331 | 31 332 | 333 | 334 | 335 | 336 | Microsoft YaHei UI 337 | 11 338 | 339 | 340 | 341 | 系号 342 | 343 | 344 | 345 | 346 | 347 | 270 348 | 80 349 | 41 350 | 31 351 | 352 | 353 | 354 | 355 | Microsoft YaHei UI 356 | 11 357 | 358 | 359 | 360 | 年龄 361 | 362 | 363 | 364 | 365 | 366 | 340 367 | 140 368 | 131 369 | 31 370 | 371 | 372 | 373 | 374 | 375 | 376 | 270 377 | 140 378 | 41 379 | 31 380 | 381 | 382 | 383 | 384 | Microsoft YaHei UI 385 | 11 386 | 387 | 388 | 389 | 姓名 390 | 391 | 392 | 393 | 394 | 395 | 600 396 | 80 397 | 131 398 | 31 399 | 400 | 401 | 402 | 403 | 404 | 405 | 536 406 | 80 407 | 41 408 | 31 409 | 410 | 411 | 412 | 413 | Microsoft YaHei UI 414 | 11 415 | 416 | 417 | 418 | 性别 419 | 420 | 421 | 422 | 423 | 424 | 600 425 | 140 426 | 131 427 | 31 428 | 429 | 430 | 431 | 432 | 433 | 434 | 500 435 | 140 436 | 81 437 | 31 438 | 439 | 440 | 441 | 442 | Microsoft YaHei UI 443 | 11 444 | 445 | 446 | 447 | 联系方式 448 | 449 | 450 | 451 | 452 | 453 | 340 454 | 80 455 | 131 456 | 31 457 | 458 | 459 | 460 | 461 | 462 | 463 | 0 464 | 3 465 | 751 466 | 41 467 | 468 | 469 | 470 | 471 | Microsoft YaHei UI 472 | 22 473 | 50 474 | false 475 | 476 | 477 | 478 | 教师信息 479 | 480 | 481 | Qt::AlignCenter 482 | 483 | 484 | 485 | 486 | 487 | 520 488 | 23 489 | 41 490 | 21 491 | 492 | 493 | 494 | 495 | Microsoft YaHei UI 496 | 11 497 | 498 | 499 | 500 | 操作 501 | 502 | 503 | 504 | 505 | 506 | 570 507 | 18 508 | 101 509 | 31 510 | 511 | 512 | 513 | 514 | Times New Roman 515 | 11 516 | 517 | 518 | 519 | 520 | SELECT 521 | 522 | 523 | 524 | 525 | INSERT 526 | 527 | 528 | 529 | 530 | DELETE 531 | 532 | 533 | 534 | label_teacher 535 | label_tid 536 | lineEdit_tid 537 | lineEdit_tdid 538 | label_tdid 539 | label_tage 540 | lineEdit_tname 541 | label_tname 542 | lineEdit_tsex 543 | label_tsex 544 | lineEdit_ttel 545 | label_ttel 546 | lineEdit_tage 547 | label_teacher_combo 548 | comboBox_teacher 549 | 550 | 551 | 552 | 553 | 554 | 410 555 | 80 556 | 271 557 | 31 558 | 559 | 560 | 561 | 562 | 563 | 564 | 25 565 | 80 566 | 81 567 | 31 568 | 569 | 570 | 571 | 572 | Microsoft YaHei UI 573 | 11 574 | 575 | 576 | 577 | 课程编号 578 | 579 | 580 | 581 | 582 | 583 | 520 584 | 140 585 | 41 586 | 31 587 | 588 | 589 | 590 | 591 | Microsoft YaHei UI 592 | 11 593 | 594 | 595 | 596 | 学时 597 | 598 | 599 | 600 | 601 | 602 | 120 603 | 80 604 | 131 605 | 31 606 | 607 | 608 | 609 | 610 | 611 | 612 | 350 613 | 140 614 | 41 615 | 31 616 | 617 | 618 | 619 | 620 | Microsoft YaHei UI 621 | 11 622 | 623 | 624 | 625 | 学分 626 | 627 | 628 | 629 | 630 | 631 | 313 632 | 80 633 | 81 634 | 31 635 | 636 | 637 | 638 | 639 | Microsoft YaHei UI 640 | 11 641 | 642 | 643 | 644 | 课程名称 645 | 646 | 647 | 648 | 649 | 650 | 410 651 | 140 652 | 91 653 | 31 654 | 655 | 656 | 657 | 658 | 659 | 660 | 10 661 | 140 662 | 101 663 | 31 664 | 665 | 666 | 667 | 668 | Microsoft YaHei UI 669 | 11 670 | 671 | 672 | 673 | 开课院系号 674 | 675 | 676 | 677 | 678 | 679 | 120 680 | 140 681 | 131 682 | 31 683 | 684 | 685 | 686 | 687 | 688 | 689 | 580 690 | 140 691 | 101 692 | 31 693 | 694 | 695 | 696 | 697 | 698 | 699 | 0 700 | 6 701 | 751 702 | 41 703 | 704 | 705 | 706 | 707 | Microsoft YaHei UI 708 | 22 709 | 50 710 | false 711 | 712 | 713 | 714 | 课程信息 715 | 716 | 717 | Qt::AlignCenter 718 | 719 | 720 | 721 | 722 | 723 | 520 724 | 23 725 | 41 726 | 21 727 | 728 | 729 | 730 | 731 | Microsoft YaHei UI 732 | 11 733 | 734 | 735 | 736 | 操作 737 | 738 | 739 | 740 | 741 | 742 | 570 743 | 18 744 | 101 745 | 31 746 | 747 | 748 | 749 | 750 | Times New Roman 751 | 11 752 | 753 | 754 | 755 | 756 | SELECT 757 | 758 | 759 | 760 | 761 | INSERT 762 | 763 | 764 | 765 | 766 | DELETE 767 | 768 | 769 | 770 | label_course 771 | lineEdit_cname 772 | label_cid 773 | label_hours 774 | lineEdit_cid 775 | label_credit 776 | label_cname 777 | lineEdit_credit 778 | label_cdid 779 | lineEdit_cdid 780 | lineEdit_hours 781 | label_course_combo 782 | comboBox_course 783 | 784 | 785 | 786 | 787 | 788 | 20 789 | 110 790 | 41 791 | 31 792 | 793 | 794 | 795 | 796 | Microsoft YaHei UI 797 | 11 798 | 799 | 800 | 801 | 班号 802 | 803 | 804 | 805 | 806 | 807 | 470 808 | 110 809 | 101 810 | 31 811 | 812 | 813 | 814 | 815 | Microsoft YaHei UI 816 | 11 817 | 818 | 819 | 820 | 班主任编号 821 | 822 | 823 | 824 | 825 | 826 | 240 827 | 110 828 | 41 829 | 31 830 | 831 | 832 | 833 | 834 | Microsoft YaHei UI 835 | 11 836 | 837 | 838 | 839 | 系号 840 | 841 | 842 | 843 | 844 | 845 | 300 846 | 110 847 | 131 848 | 31 849 | 850 | 851 | 852 | 853 | 854 | 855 | 580 856 | 110 857 | 131 858 | 31 859 | 860 | 861 | 862 | 863 | 864 | 865 | 80 866 | 110 867 | 131 868 | 31 869 | 870 | 871 | 872 | 873 | 874 | 875 | 0 876 | 3 877 | 751 878 | 51 879 | 880 | 881 | 882 | 883 | Microsoft YaHei UI 884 | 22 885 | 50 886 | false 887 | 888 | 889 | 890 | 班级信息 891 | 892 | 893 | Qt::AlignCenter 894 | 895 | 896 | 897 | 898 | 899 | 520 900 | 23 901 | 41 902 | 21 903 | 904 | 905 | 906 | 907 | Microsoft YaHei UI 908 | 11 909 | 910 | 911 | 912 | 操作 913 | 914 | 915 | 916 | 917 | 918 | 570 919 | 18 920 | 101 921 | 31 922 | 923 | 924 | 925 | 926 | Times New Roman 927 | 11 928 | 929 | 930 | 931 | 932 | SELECT 933 | 934 | 935 | 936 | 937 | INSERT 938 | 939 | 940 | 941 | 942 | DELETE 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | 951 | 380 952 | 100 953 | 81 954 | 31 955 | 956 | 957 | 958 | 959 | Microsoft YaHei UI 960 | 11 961 | 962 | 963 | 964 | 院系名称 965 | 966 | 967 | 968 | 969 | 970 | 150 971 | 100 972 | 41 973 | 31 974 | 975 | 976 | 977 | 978 | Microsoft YaHei UI 979 | 11 980 | 981 | 982 | 983 | 系号 984 | 985 | 986 | 987 | 988 | 989 | 474 990 | 100 991 | 131 992 | 31 993 | 994 | 995 | 996 | 997 | 998 | 999 | 210 1000 | 100 1001 | 131 1002 | 31 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 0 1010 | 3 1011 | 751 1012 | 51 1013 | 1014 | 1015 | 1016 | 1017 | Microsoft YaHei UI 1018 | 22 1019 | 50 1020 | false 1021 | 1022 | 1023 | 1024 | 院系信息 1025 | 1026 | 1027 | Qt::AlignCenter 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 570 1034 | 18 1035 | 101 1036 | 31 1037 | 1038 | 1039 | 1040 | 1041 | Times New Roman 1042 | 11 1043 | 1044 | 1045 | 1046 | 1047 | SELECT 1048 | 1049 | 1050 | 1051 | 1052 | INSERT 1053 | 1054 | 1055 | 1056 | 1057 | DELETE 1058 | 1059 | 1060 | 1061 | 1062 | 1063 | 1064 | 520 1065 | 23 1066 | 41 1067 | 21 1068 | 1069 | 1070 | 1071 | 1072 | Microsoft YaHei UI 1073 | 11 1074 | 1075 | 1076 | 1077 | 操作 1078 | 1079 | 1080 | 1081 | 1082 | 1083 | 1084 | 1085 | 470 1086 | 110 1087 | 131 1088 | 31 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | 220 1096 | 110 1097 | 131 1098 | 31 1099 | 1100 | 1101 | 1102 | 1103 | 1104 | 1105 | 140 1106 | 110 1107 | 61 1108 | 31 1109 | 1110 | 1111 | 1112 | 1113 | Microsoft YaHei UI 1114 | 11 1115 | 1116 | 1117 | 1118 | 教室号 1119 | 1120 | 1121 | 1122 | 1123 | 1124 | 380 1125 | 110 1126 | 81 1127 | 31 1128 | 1129 | 1130 | 1131 | 1132 | Microsoft YaHei UI 1133 | 11 1134 | 1135 | 1136 | 1137 | 教室地点 1138 | 1139 | 1140 | 1141 | 1142 | 1143 | 0 1144 | 6 1145 | 751 1146 | 41 1147 | 1148 | 1149 | 1150 | 1151 | Microsoft YaHei UI 1152 | 22 1153 | 50 1154 | false 1155 | 1156 | 1157 | 1158 | 教室信息 1159 | 1160 | 1161 | Qt::AlignCenter 1162 | 1163 | 1164 | 1165 | 1166 | 1167 | 520 1168 | 23 1169 | 41 1170 | 21 1171 | 1172 | 1173 | 1174 | 1175 | Microsoft YaHei UI 1176 | 11 1177 | 1178 | 1179 | 1180 | 操作 1181 | 1182 | 1183 | 1184 | 1185 | 1186 | 570 1187 | 18 1188 | 101 1189 | 31 1190 | 1191 | 1192 | 1193 | 1194 | Times New Roman 1195 | 11 1196 | 1197 | 1198 | 1199 | 1200 | SELECT 1201 | 1202 | 1203 | 1204 | 1205 | INSERT 1206 | 1207 | 1208 | 1209 | 1210 | DELETE 1211 | 1212 | 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 0 1220 | 3 1221 | 751 1222 | 51 1223 | 1224 | 1225 | 1226 | 1227 | Microsoft YaHei UI 1228 | 22 1229 | 50 1230 | false 1231 | 1232 | 1233 | 1234 | 学生选课 1235 | 1236 | 1237 | Qt::AlignCenter 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 570 1244 | 18 1245 | 101 1246 | 31 1247 | 1248 | 1249 | 1250 | 1251 | Times New Roman 1252 | 11 1253 | 1254 | 1255 | 1256 | 1257 | SELECT 1258 | 1259 | 1260 | 1261 | 1262 | INSERT 1263 | 1264 | 1265 | 1266 | 1267 | DELETE 1268 | 1269 | 1270 | 1271 | 1272 | 1273 | 1274 | 530 1275 | 23 1276 | 41 1277 | 21 1278 | 1279 | 1280 | 1281 | 1282 | Microsoft YaHei UI 1283 | 11 1284 | 1285 | 1286 | 1287 | 操作 1288 | 1289 | 1290 | 1291 | 1292 | 1293 | 150 1294 | 110 1295 | 41 1296 | 31 1297 | 1298 | 1299 | 1300 | 1301 | Microsoft YaHei UI 1302 | 11 1303 | 1304 | 1305 | 1306 | 学号 1307 | 1308 | 1309 | 1310 | 1311 | 1312 | 400 1313 | 110 1314 | 41 1315 | 31 1316 | 1317 | 1318 | 1319 | 1320 | Microsoft YaHei UI 1321 | 11 1322 | 1323 | 1324 | 1325 | 课程 1326 | 1327 | 1328 | 1329 | 1330 | 1331 | 210 1332 | 110 1333 | 131 1334 | 31 1335 | 1336 | 1337 | 1338 | 1339 | 1340 | 1341 | 460 1342 | 110 1343 | 131 1344 | 31 1345 | 1346 | 1347 | 1348 | 1349 | Times New Roman 1350 | 11 1351 | 1352 | 1353 | 1354 | 1355 | 1356 | 1357 | 1358 | 1359 | 526 1360 | 110 1361 | 41 1362 | 31 1363 | 1364 | 1365 | 1366 | 1367 | Microsoft YaHei UI 1368 | 11 1369 | 1370 | 1371 | 1372 | 学号 1373 | 1374 | 1375 | 1376 | 1377 | 1378 | 0 1379 | 3 1380 | 751 1381 | 51 1382 | 1383 | 1384 | 1385 | 1386 | Microsoft YaHei UI 1387 | 22 1388 | 50 1389 | false 1390 | 1391 | 1392 | 1393 | 课程成绩录入 1394 | 1395 | 1396 | Qt::AlignCenter 1397 | 1398 | 1399 | 1400 | 1401 | 1402 | 320 1403 | 110 1404 | 131 1405 | 31 1406 | 1407 | 1408 | 1409 | 1410 | 1411 | 1412 | 10 1413 | 110 1414 | 61 1415 | 31 1416 | 1417 | 1418 | 1419 | 1420 | Microsoft YaHei UI 1421 | 11 1422 | 1423 | 1424 | 1425 | 课程号 1426 | 1427 | 1428 | 1429 | 1430 | 1431 | 270 1432 | 110 1433 | 41 1434 | 31 1435 | 1436 | 1437 | 1438 | 1439 | Microsoft YaHei UI 1440 | 11 1441 | 1442 | 1443 | 1444 | 得分 1445 | 1446 | 1447 | 1448 | 1449 | 1450 | 80 1451 | 110 1452 | 131 1453 | 31 1454 | 1455 | 1456 | 1457 | 1458 | Times New Roman 1459 | 11 1460 | 1461 | 1462 | 1463 | 1464 | 1465 | 1466 | 580 1467 | 110 1468 | 131 1469 | 31 1470 | 1471 | 1472 | 1473 | 1474 | 1475 | 1476 | 1477 | 1478 | 250 1479 | 80 1480 | 131 1481 | 31 1482 | 1483 | 1484 | 1485 | 1486 | 1487 | 1488 | 450 1489 | 80 1490 | 41 1491 | 31 1492 | 1493 | 1494 | 1495 | 1496 | Microsoft YaHei UI 1497 | 11 1498 | 1499 | 1500 | 1501 | 姓名 1502 | 1503 | 1504 | 1505 | 1506 | 1507 | 200 1508 | 80 1509 | 41 1510 | 31 1511 | 1512 | 1513 | 1514 | 1515 | Microsoft YaHei UI 1516 | 11 1517 | 1518 | 1519 | 1520 | 学号 1521 | 1522 | 1523 | 1524 | 1525 | 1526 | 0 1527 | 3 1528 | 751 1529 | 51 1530 | 1531 | 1532 | 1533 | 1534 | Microsoft YaHei UI 1535 | 22 1536 | 50 1537 | false 1538 | 1539 | 1540 | 1541 | 学生查询成绩 1542 | 1543 | 1544 | Qt::AlignCenter 1545 | 1546 | 1547 | 1548 | 1549 | 1550 | 500 1551 | 80 1552 | 131 1553 | 31 1554 | 1555 | 1556 | 1557 | 1558 | 1559 | 1560 | 0 1561 | 130 1562 | 751 1563 | 31 1564 | 1565 | 1566 | 1567 | 1568 | Microsoft YaHei UI 1569 | 12 1570 | 50 1571 | false 1572 | 1573 | 1574 | 1575 | 请输入正确的学号和对应的姓名,否则无法查询!!! 1576 | 1577 | 1578 | Qt::AlignCenter 1579 | 1580 | 1581 | 1582 | 1583 | 1584 | 40 1585 | 80 1586 | 121 1587 | 31 1588 | 1589 | 1590 | 1591 | 1592 | Microsoft YaHei UI 1593 | 11 1594 | 1595 | 1596 | 1597 | 是否出成绩 1598 | 1599 | 1600 | 1601 | 1602 | 1603 | 1604 | 1605 | 100 1606 | 80 1607 | 61 1608 | 31 1609 | 1610 | 1611 | 1612 | 1613 | Microsoft YaHei UI 1614 | 11 1615 | 1616 | 1617 | 1618 | 课程号 1619 | 1620 | 1621 | 1622 | 1623 | 1624 | 410 1625 | 80 1626 | 61 1627 | 31 1628 | 1629 | 1630 | 1631 | 1632 | Microsoft YaHei UI 1633 | 11 1634 | 1635 | 1636 | 1637 | 课程名 1638 | 1639 | 1640 | 1641 | 1642 | 1643 | 480 1644 | 80 1645 | 131 1646 | 31 1647 | 1648 | 1649 | 1650 | 1651 | 1652 | 1653 | 170 1654 | 80 1655 | 131 1656 | 31 1657 | 1658 | 1659 | 1660 | 1661 | 1662 | 1663 | 0 1664 | 7 1665 | 751 1666 | 41 1667 | 1668 | 1669 | 1670 | 1671 | Microsoft YaHei UI 1672 | 22 1673 | 50 1674 | false 1675 | 1676 | 1677 | 1678 | 课程成绩单 1679 | 1680 | 1681 | Qt::AlignCenter 1682 | 1683 | 1684 | 1685 | 1686 | 1687 | 0 1688 | 130 1689 | 751 1690 | 31 1691 | 1692 | 1693 | 1694 | 1695 | Microsoft YaHei UI 1696 | 12 1697 | 50 1698 | false 1699 | 1700 | 1701 | 1702 | 请输入正确的课程号(可以不输入课程名,若输入则一定要正确) 1703 | 1704 | 1705 | Qt::AlignCenter 1706 | 1707 | 1708 | 1709 | 1710 | 1711 | 1712 | 1713 | 570 1714 | 18 1715 | 101 1716 | 31 1717 | 1718 | 1719 | 1720 | 1721 | Times New Roman 1722 | 11 1723 | 1724 | 1725 | 1726 | 1727 | SELECT 1728 | 1729 | 1730 | 1731 | 1732 | INSERT 1733 | 1734 | 1735 | 1736 | 1737 | DELETE 1738 | 1739 | 1740 | 1741 | 1742 | 1743 | 1744 | 0 1745 | 3 1746 | 751 1747 | 41 1748 | 1749 | 1750 | 1751 | 1752 | Microsoft YaHei UI 1753 | 22 1754 | 50 1755 | false 1756 | 1757 | 1758 | 1759 | 教学任务安排 1760 | 1761 | 1762 | Qt::AlignCenter 1763 | 1764 | 1765 | 1766 | 1767 | 1768 | 520 1769 | 23 1770 | 41 1771 | 21 1772 | 1773 | 1774 | 1775 | 1776 | Microsoft YaHei UI 1777 | 11 1778 | 1779 | 1780 | 1781 | 操作 1782 | 1783 | 1784 | 1785 | 1786 | 1787 | 400 1788 | 80 1789 | 81 1790 | 31 1791 | 1792 | 1793 | 1794 | 1795 | Microsoft YaHei UI 1796 | 11 1797 | 1798 | 1799 | 1800 | 教师编号 1801 | 1802 | 1803 | 1804 | 1805 | 1806 | 190 1807 | 80 1808 | 131 1809 | 31 1810 | 1811 | 1812 | 1813 | 1814 | Times New Roman 1815 | 11 1816 | 1817 | 1818 | 1819 | 1820 | 1821 | 1822 | 120 1823 | 80 1824 | 61 1825 | 31 1826 | 1827 | 1828 | 1829 | 1830 | Microsoft YaHei UI 1831 | 11 1832 | 1833 | 1834 | 1835 | 课程号 1836 | 1837 | 1838 | 1839 | 1840 | 1841 | 490 1842 | 80 1843 | 131 1844 | 31 1845 | 1846 | 1847 | 1848 | 1849 | Times New Roman 1850 | 11 1851 | 1852 | 1853 | 1854 | 1855 | 1856 | 1857 | 190 1858 | 140 1859 | 131 1860 | 31 1861 | 1862 | 1863 | 1864 | 1865 | 1866 | 1867 | 100 1868 | 140 1869 | 71 1870 | 31 1871 | 1872 | 1873 | 1874 | 1875 | Microsoft YaHei UI 1876 | 11 1877 | 1878 | 1879 | 1880 | 开课星期 1881 | 1882 | 1883 | 1884 | 1885 | 1886 | 490 1887 | 140 1888 | 131 1889 | 31 1890 | 1891 | 1892 | 1893 | 1894 | 1895 | 1896 | 400 1897 | 140 1898 | 71 1899 | 31 1900 | 1901 | 1902 | 1903 | 1904 | Microsoft YaHei UI 1905 | 11 1906 | 1907 | 1908 | 1909 | 结课星期 1910 | 1911 | 1912 | label_tt 1913 | comboBox_tt 1914 | label_tt_combo 1915 | label_tttid 1916 | comboBox_ttcid 1917 | label_ttcid 1918 | comboBox_tttid 1919 | lineEdit_startweek 1920 | label_tt_startweek 1921 | lineEdit_endweek 1922 | label_tt_endweek 1923 | 1924 | 1925 | 1926 | 1927 | 1928 | 450 1929 | 80 1930 | 51 1931 | 31 1932 | 1933 | 1934 | 1935 | 1936 | Microsoft YaHei UI 1937 | 11 1938 | 1939 | 1940 | 1941 | 星期 1942 | 1943 | 1944 | 1945 | 1946 | 1947 | 570 1948 | 18 1949 | 101 1950 | 31 1951 | 1952 | 1953 | 1954 | 1955 | Times New Roman 1956 | 11 1957 | 1958 | 1959 | 1960 | 1961 | SELECT 1962 | 1963 | 1964 | 1965 | 1966 | INSERT 1967 | 1968 | 1969 | 1970 | 1971 | DELETE 1972 | 1973 | 1974 | 1975 | 1976 | 1977 | 1978 | 420 1979 | 140 1980 | 71 1981 | 31 1982 | 1983 | 1984 | 1985 | 1986 | Microsoft YaHei UI 1987 | 11 1988 | 1989 | 1990 | 1991 | 教室编号 1992 | 1993 | 1994 | 1995 | 1996 | 1997 | 530 1998 | 23 1999 | 41 2000 | 21 2001 | 2002 | 2003 | 2004 | 2005 | Microsoft YaHei UI 2006 | 11 2007 | 2008 | 2009 | 2010 | 操作 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 170 2017 | 80 2018 | 221 2019 | 31 2020 | 2021 | 2022 | 2023 | 2024 | Times New Roman 2025 | 11 2026 | 2027 | 2028 | 2029 | 2030 | 2031 | 2032 | 0 2033 | 3 2034 | 751 2035 | 41 2036 | 2037 | 2038 | 2039 | 2040 | Microsoft YaHei UI 2041 | 22 2042 | 50 2043 | false 2044 | 2045 | 2046 | 2047 | 教学教室安排 2048 | 2049 | 2050 | Qt::AlignCenter 2051 | 2052 | 2053 | 2054 | 2055 | 2056 | 20 2057 | 80 2058 | 141 2059 | 31 2060 | 2061 | 2062 | 2063 | 2064 | Microsoft YaHei UI 2065 | 11 2066 | 2067 | 2068 | 2069 | 课程号-教师编号 2070 | 2071 | 2072 | 2073 | 2074 | 2075 | 500 2076 | 80 2077 | 31 2078 | 31 2079 | 2080 | 2081 | 2082 | 2083 | Times New Roman 2084 | 11 2085 | 2086 | 2087 | 2088 | 2089 | 2090 | 2091 | 2092 | 2093 | 2094 | 1 2095 | 2096 | 2097 | 2098 | 2099 | 2 2100 | 2101 | 2102 | 2103 | 2104 | 3 2105 | 2106 | 2107 | 2108 | 2109 | 4 2110 | 2111 | 2112 | 2113 | 2114 | 5 2115 | 2116 | 2117 | 2118 | 2119 | 6 2120 | 2121 | 2122 | 2123 | 2124 | 7 2125 | 2126 | 2127 | 2128 | 2129 | 2130 | 2131 | 170 2132 | 140 2133 | 81 2134 | 31 2135 | 2136 | 2137 | 2138 | 2139 | Times New Roman 2140 | 11 2141 | 2142 | 2143 | 2144 | 2145 | 2146 | 2147 | 2148 | 2149 | 2150 | 1(1~2节) 2151 | 2152 | 2153 | 2154 | 2155 | 2(3~4节) 2156 | 2157 | 2158 | 2159 | 2160 | 3(5~6节) 2161 | 2162 | 2163 | 2164 | 2165 | 4(7~8节) 2166 | 2167 | 2168 | 2169 | 2170 | 5(9~10节) 2171 | 2172 | 2173 | 2174 | 2175 | 6(11~12节) 2176 | 2177 | 2178 | 2179 | 2180 | 2181 | 2182 | 120 2183 | 140 2184 | 41 2185 | 31 2186 | 2187 | 2188 | 2189 | 2190 | Microsoft YaHei UI 2191 | 11 2192 | 2193 | 2194 | 2195 | 节次 2196 | 2197 | 2198 | 2199 | 2200 | 2201 | 500 2202 | 140 2203 | 221 2204 | 31 2205 | 2206 | 2207 | 2208 | 2209 | Times New Roman 2210 | 11 2211 | 2212 | 2213 | 2214 | 2215 | 2216 | 2217 | 2218 | 2219 | 790 2220 | 60 2221 | 121 2222 | 51 2223 | 2224 | 2225 | 2226 | 2227 | Microsoft JhengHei UI 2228 | 11 2229 | 2230 | 2231 | 2232 | 确认 2233 | 2234 | 2235 | 2236 | 2237 | 2238 | 790 2239 | 130 2240 | 121 2241 | 51 2242 | 2243 | 2244 | 2245 | 2246 | Microsoft JhengHei UI 2247 | 11 2248 | 2249 | 2250 | 2251 | 清除 2252 | 2253 | 2254 | 2255 | 2256 | 2257 | 10 2258 | 240 2259 | 901 2260 | 491 2261 | 2262 | 2263 | 2264 | 2265 | 2266 | 2267 | 2268 | 2269 | 0 2270 | 0 2271 | 930 2272 | 26 2273 | 2274 | 2275 | 2276 | 2277 | 基础信息 2278 | 2279 | 2280 | 2281 | 2282 | 2283 | 2284 | 2285 | 2286 | 2287 | 2288 | 其他 2289 | 2290 | 2291 | 2292 | 2293 | 2294 | 2295 | 2296 | 2297 | 2298 | 2299 | 2300 | 2301 | 2302 | false 2303 | 2304 | 2305 | 2306 | icons/student.png 2307 | 2308 | 2309 | 2310 | 学生 2311 | 2312 | 2313 | Ctrl+Shift+S 2314 | 2315 | 2316 | 2317 | 2318 | 2319 | icons/teacher.png 2320 | 2321 | 2322 | 2323 | 教师 2324 | 2325 | 2326 | Ctrl+Shift+T 2327 | 2328 | 2329 | 2330 | 2331 | 2332 | icons/course.png 2333 | 2334 | 2335 | 2336 | 课程 2337 | 2338 | 2339 | Ctrl+Shift+C 2340 | 2341 | 2342 | 2343 | 2344 | 2345 | icons/class.png 2346 | 2347 | 2348 | 2349 | 班级 2350 | 2351 | 2352 | Ctrl+Shift+X 2353 | 2354 | 2355 | 2356 | 2357 | 2358 | icons/department.png 2359 | 2360 | 2361 | 2362 | 院系 2363 | 2364 | 2365 | Ctrl+Shift+D 2366 | 2367 | 2368 | 2369 | 2370 | 2371 | icons/classroom.png 2372 | 2373 | 2374 | 2375 | 教室 2376 | 2377 | 2378 | Ctrl+Shift+R 2379 | 2380 | 2381 | 2382 | 2383 | 2384 | icons/sc.pngicons/sc.png 2385 | 2386 | 2387 | 学生选课 2388 | 2389 | 2390 | 2391 | 2392 | 2393 | icons/sc_score.pngicons/sc_score.png 2394 | 2395 | 2396 | 学生成绩录入 2397 | 2398 | 2399 | 2400 | 2401 | 2402 | icons/student_transcript.pngicons/student_transcript.png 2403 | 2404 | 2405 | 学生成绩单 2406 | 2407 | 2408 | 2409 | 2410 | 2411 | icons/course_transcript.pngicons/course_transcript.png 2412 | 2413 | 2414 | 课程成绩单 2415 | 2416 | 2417 | 2418 | 2419 | 2420 | icons/tt.pngicons/tt.png 2421 | 2422 | 2423 | 教学任务安排 2424 | 2425 | 2426 | 2427 | 2428 | 2429 | icons/ttr.pngicons/ttr.png 2430 | 2431 | 2432 | 教学-教室安排 2433 | 2434 | 2435 | 2436 | 2437 | 2438 | 2439 | -------------------------------------------------------------------------------- /Lab/Lab3/Lab3/sms_test.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'sms.ui' 4 | # 5 | # Created by: PyQt5 UI code generator 5.15.4 6 | # 7 | # WARNING: Any manual changes made to this file will be lost when pyuic5 is 8 | # run again. Do not edit this file unless you know what you are doing. 9 | 10 | 11 | from PyQt5 import QtCore, QtGui, QtWidgets 12 | import pymysql 13 | from datetime import date 14 | 15 | 16 | class Ui_MainWindow(object): 17 | def __init__(self, db): 18 | self.db = db 19 | self.cursor = db.cursor() 20 | 21 | def setupUi(self, MainWindow): 22 | MainWindow.setObjectName("MainWindow") 23 | MainWindow.resize(930, 794) 24 | self.centralwidget = QtWidgets.QWidget(MainWindow) 25 | self.centralwidget.setObjectName("centralwidget") 26 | self.stackedWidget = QtWidgets.QStackedWidget(self.centralwidget) 27 | self.stackedWidget.setGeometry(QtCore.QRect(10, 20, 751, 191)) 28 | self.stackedWidget.setFrameShape(QtWidgets.QFrame.Panel) 29 | self.stackedWidget.setFrameShadow(QtWidgets.QFrame.Plain) 30 | self.stackedWidget.setObjectName("stackedWidget") 31 | self.page_student = QtWidgets.QWidget() 32 | self.page_student.setObjectName("page_student") 33 | self.lineEdit_sid = QtWidgets.QLineEdit(self.page_student) 34 | self.lineEdit_sid.setGeometry(QtCore.QRect(100, 80, 131, 31)) 35 | self.lineEdit_sid.setObjectName("lineEdit_sid") 36 | self.lineEdit_sclass = QtWidgets.QLineEdit(self.page_student) 37 | self.lineEdit_sclass.setGeometry(QtCore.QRect(100, 140, 131, 31)) 38 | self.lineEdit_sclass.setObjectName("lineEdit_sclass") 39 | self.lineEdit_ssex = QtWidgets.QLineEdit(self.page_student) 40 | self.lineEdit_ssex.setGeometry(QtCore.QRect(600, 80, 131, 31)) 41 | self.lineEdit_ssex.setObjectName("lineEdit_ssex") 42 | self.lineEdit_sname = QtWidgets.QLineEdit(self.page_student) 43 | self.lineEdit_sname.setGeometry(QtCore.QRect(340, 140, 131, 31)) 44 | self.lineEdit_sname.setObjectName("lineEdit_sname") 45 | self.lineEdit_stel = QtWidgets.QLineEdit(self.page_student) 46 | self.lineEdit_stel.setGeometry(QtCore.QRect(600, 140, 131, 31)) 47 | self.lineEdit_stel.setObjectName("lineEdit_stel") 48 | self.label_sid = QtWidgets.QLabel(self.page_student) 49 | self.label_sid.setGeometry(QtCore.QRect(40, 80, 51, 31)) 50 | font = QtGui.QFont() 51 | font.setFamily("Microsoft YaHei UI") 52 | font.setPointSize(11) 53 | self.label_sid.setFont(font) 54 | self.label_sid.setObjectName("label_sid") 55 | self.label_sclass = QtWidgets.QLabel(self.page_student) 56 | self.label_sclass.setGeometry(QtCore.QRect(40, 140, 51, 31)) 57 | font = QtGui.QFont() 58 | font.setFamily("Microsoft YaHei UI") 59 | font.setPointSize(11) 60 | self.label_sclass.setFont(font) 61 | self.label_sclass.setObjectName("label_sclass") 62 | self.label_sage = QtWidgets.QLabel(self.page_student) 63 | self.label_sage.setGeometry(QtCore.QRect(270, 80, 51, 31)) 64 | font = QtGui.QFont() 65 | font.setFamily("Microsoft YaHei UI") 66 | font.setPointSize(11) 67 | self.label_sage.setFont(font) 68 | self.label_sage.setObjectName("label_sage") 69 | self.label_sname = QtWidgets.QLabel(self.page_student) 70 | self.label_sname.setGeometry(QtCore.QRect(270, 140, 51, 31)) 71 | font = QtGui.QFont() 72 | font.setFamily("Microsoft YaHei UI") 73 | font.setPointSize(11) 74 | self.label_sname.setFont(font) 75 | self.label_sname.setObjectName("label_sname") 76 | self.label_ssex = QtWidgets.QLabel(self.page_student) 77 | self.label_ssex.setGeometry(QtCore.QRect(536, 80, 51, 31)) 78 | font = QtGui.QFont() 79 | font.setFamily("Microsoft YaHei UI") 80 | font.setPointSize(11) 81 | self.label_ssex.setFont(font) 82 | self.label_ssex.setObjectName("label_ssex") 83 | self.label_stel = QtWidgets.QLabel(self.page_student) 84 | self.label_stel.setGeometry(QtCore.QRect(500, 140, 91, 31)) 85 | font = QtGui.QFont() 86 | font.setFamily("Microsoft YaHei UI") 87 | font.setPointSize(11) 88 | self.label_stel.setFont(font) 89 | self.label_stel.setObjectName("label_stel") 90 | self.lineEdit_sage = QtWidgets.QLineEdit(self.page_student) 91 | self.lineEdit_sage.setGeometry(QtCore.QRect(340, 80, 131, 31)) 92 | self.lineEdit_sage.setObjectName("lineEdit_sage") 93 | self.label_student = QtWidgets.QLabel(self.page_student) 94 | self.label_student.setGeometry(QtCore.QRect(0, 0, 751, 51)) 95 | font = QtGui.QFont() 96 | font.setFamily("Microsoft YaHei UI") 97 | font.setPointSize(22) 98 | font.setBold(False) 99 | font.setWeight(50) 100 | self.label_student.setFont(font) 101 | self.label_student.setAlignment(QtCore.Qt.AlignCenter) 102 | self.label_student.setObjectName("label_student") 103 | self.comboBox_student = QtWidgets.QComboBox(self.page_student) 104 | self.comboBox_student.setGeometry(QtCore.QRect(570, 18, 101, 31)) 105 | font = QtGui.QFont() 106 | font.setFamily("Times New Roman") 107 | font.setPointSize(11) 108 | self.comboBox_student.setFont(font) 109 | self.comboBox_student.setObjectName("comboBox_student") 110 | self.comboBox_student.addItem("") 111 | self.comboBox_student.addItem("") 112 | self.comboBox_student.addItem("") 113 | self.label_student_combo = QtWidgets.QLabel(self.page_student) 114 | self.label_student_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 115 | font = QtGui.QFont() 116 | font.setFamily("Microsoft YaHei UI") 117 | font.setPointSize(11) 118 | self.label_student_combo.setFont(font) 119 | self.label_student_combo.setObjectName("label_student_combo") 120 | self.stackedWidget.addWidget(self.page_student) 121 | self.page_teacher = QtWidgets.QWidget() 122 | self.page_teacher.setObjectName("page_teacher") 123 | self.label_tid = QtWidgets.QLabel(self.page_teacher) 124 | self.label_tid.setGeometry(QtCore.QRect(4, 80, 81, 31)) 125 | font = QtGui.QFont() 126 | font.setFamily("Microsoft YaHei UI") 127 | font.setPointSize(11) 128 | self.label_tid.setFont(font) 129 | self.label_tid.setObjectName("label_tid") 130 | self.lineEdit_tid = QtWidgets.QLineEdit(self.page_teacher) 131 | self.lineEdit_tid.setGeometry(QtCore.QRect(100, 80, 131, 31)) 132 | self.lineEdit_tid.setObjectName("lineEdit_tid") 133 | self.lineEdit_tdid = QtWidgets.QLineEdit(self.page_teacher) 134 | self.lineEdit_tdid.setGeometry(QtCore.QRect(100, 140, 131, 31)) 135 | self.lineEdit_tdid.setObjectName("lineEdit_tdid") 136 | self.label_tdid = QtWidgets.QLabel(self.page_teacher) 137 | self.label_tdid.setGeometry(QtCore.QRect(40, 140, 41, 31)) 138 | font = QtGui.QFont() 139 | font.setFamily("Microsoft YaHei UI") 140 | font.setPointSize(11) 141 | self.label_tdid.setFont(font) 142 | self.label_tdid.setObjectName("label_tdid") 143 | self.label_tage = QtWidgets.QLabel(self.page_teacher) 144 | self.label_tage.setGeometry(QtCore.QRect(270, 80, 41, 31)) 145 | font = QtGui.QFont() 146 | font.setFamily("Microsoft YaHei UI") 147 | font.setPointSize(11) 148 | self.label_tage.setFont(font) 149 | self.label_tage.setObjectName("label_tage") 150 | self.lineEdit_tname = QtWidgets.QLineEdit(self.page_teacher) 151 | self.lineEdit_tname.setGeometry(QtCore.QRect(340, 140, 131, 31)) 152 | self.lineEdit_tname.setObjectName("lineEdit_tname") 153 | self.label_tname = QtWidgets.QLabel(self.page_teacher) 154 | self.label_tname.setGeometry(QtCore.QRect(270, 140, 41, 31)) 155 | font = QtGui.QFont() 156 | font.setFamily("Microsoft YaHei UI") 157 | font.setPointSize(11) 158 | self.label_tname.setFont(font) 159 | self.label_tname.setObjectName("label_tname") 160 | self.lineEdit_tsex = QtWidgets.QLineEdit(self.page_teacher) 161 | self.lineEdit_tsex.setGeometry(QtCore.QRect(600, 80, 131, 31)) 162 | self.lineEdit_tsex.setObjectName("lineEdit_tsex") 163 | self.label_tsex = QtWidgets.QLabel(self.page_teacher) 164 | self.label_tsex.setGeometry(QtCore.QRect(536, 80, 41, 31)) 165 | font = QtGui.QFont() 166 | font.setFamily("Microsoft YaHei UI") 167 | font.setPointSize(11) 168 | self.label_tsex.setFont(font) 169 | self.label_tsex.setObjectName("label_tsex") 170 | self.lineEdit_ttel = QtWidgets.QLineEdit(self.page_teacher) 171 | self.lineEdit_ttel.setGeometry(QtCore.QRect(600, 140, 131, 31)) 172 | self.lineEdit_ttel.setObjectName("lineEdit_ttel") 173 | self.label_ttel = QtWidgets.QLabel(self.page_teacher) 174 | self.label_ttel.setGeometry(QtCore.QRect(500, 140, 81, 31)) 175 | font = QtGui.QFont() 176 | font.setFamily("Microsoft YaHei UI") 177 | font.setPointSize(11) 178 | self.label_ttel.setFont(font) 179 | self.label_ttel.setObjectName("label_ttel") 180 | self.lineEdit_tage = QtWidgets.QLineEdit(self.page_teacher) 181 | self.lineEdit_tage.setGeometry(QtCore.QRect(340, 80, 131, 31)) 182 | self.lineEdit_tage.setObjectName("lineEdit_tage") 183 | self.label_teacher = QtWidgets.QLabel(self.page_teacher) 184 | self.label_teacher.setGeometry(QtCore.QRect(0, 3, 751, 41)) 185 | font = QtGui.QFont() 186 | font.setFamily("Microsoft YaHei UI") 187 | font.setPointSize(22) 188 | font.setBold(False) 189 | font.setWeight(50) 190 | self.label_teacher.setFont(font) 191 | self.label_teacher.setAlignment(QtCore.Qt.AlignCenter) 192 | self.label_teacher.setObjectName("label_teacher") 193 | self.label_teacher_combo = QtWidgets.QLabel(self.page_teacher) 194 | self.label_teacher_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 195 | font = QtGui.QFont() 196 | font.setFamily("Microsoft YaHei UI") 197 | font.setPointSize(11) 198 | self.label_teacher_combo.setFont(font) 199 | self.label_teacher_combo.setObjectName("label_teacher_combo") 200 | self.comboBox_teacher = QtWidgets.QComboBox(self.page_teacher) 201 | self.comboBox_teacher.setGeometry(QtCore.QRect(570, 18, 101, 31)) 202 | font = QtGui.QFont() 203 | font.setFamily("Times New Roman") 204 | font.setPointSize(11) 205 | self.comboBox_teacher.setFont(font) 206 | self.comboBox_teacher.setObjectName("comboBox_teacher") 207 | self.comboBox_teacher.addItem("") 208 | self.comboBox_teacher.addItem("") 209 | self.comboBox_teacher.addItem("") 210 | self.label_teacher.raise_() 211 | self.label_tid.raise_() 212 | self.lineEdit_tid.raise_() 213 | self.lineEdit_tdid.raise_() 214 | self.label_tdid.raise_() 215 | self.label_tage.raise_() 216 | self.lineEdit_tname.raise_() 217 | self.label_tname.raise_() 218 | self.lineEdit_tsex.raise_() 219 | self.label_tsex.raise_() 220 | self.lineEdit_ttel.raise_() 221 | self.label_ttel.raise_() 222 | self.lineEdit_tage.raise_() 223 | self.label_teacher_combo.raise_() 224 | self.comboBox_teacher.raise_() 225 | self.stackedWidget.addWidget(self.page_teacher) 226 | self.page_course = QtWidgets.QWidget() 227 | self.page_course.setObjectName("page_course") 228 | self.lineEdit_cname = QtWidgets.QLineEdit(self.page_course) 229 | self.lineEdit_cname.setGeometry(QtCore.QRect(410, 80, 271, 31)) 230 | self.lineEdit_cname.setObjectName("lineEdit_cname") 231 | self.label_cid = QtWidgets.QLabel(self.page_course) 232 | self.label_cid.setGeometry(QtCore.QRect(25, 80, 81, 31)) 233 | font = QtGui.QFont() 234 | font.setFamily("Microsoft YaHei UI") 235 | font.setPointSize(11) 236 | self.label_cid.setFont(font) 237 | self.label_cid.setObjectName("label_cid") 238 | self.label_hours = QtWidgets.QLabel(self.page_course) 239 | self.label_hours.setGeometry(QtCore.QRect(520, 140, 41, 31)) 240 | font = QtGui.QFont() 241 | font.setFamily("Microsoft YaHei UI") 242 | font.setPointSize(11) 243 | self.label_hours.setFont(font) 244 | self.label_hours.setObjectName("label_hours") 245 | self.lineEdit_cid = QtWidgets.QLineEdit(self.page_course) 246 | self.lineEdit_cid.setGeometry(QtCore.QRect(120, 80, 131, 31)) 247 | self.lineEdit_cid.setObjectName("lineEdit_cid") 248 | self.label_credit = QtWidgets.QLabel(self.page_course) 249 | self.label_credit.setGeometry(QtCore.QRect(350, 140, 41, 31)) 250 | font = QtGui.QFont() 251 | font.setFamily("Microsoft YaHei UI") 252 | font.setPointSize(11) 253 | self.label_credit.setFont(font) 254 | self.label_credit.setObjectName("label_credit") 255 | self.label_cname = QtWidgets.QLabel(self.page_course) 256 | self.label_cname.setGeometry(QtCore.QRect(313, 80, 81, 31)) 257 | font = QtGui.QFont() 258 | font.setFamily("Microsoft YaHei UI") 259 | font.setPointSize(11) 260 | self.label_cname.setFont(font) 261 | self.label_cname.setObjectName("label_cname") 262 | self.lineEdit_credit = QtWidgets.QLineEdit(self.page_course) 263 | self.lineEdit_credit.setGeometry(QtCore.QRect(410, 140, 91, 31)) 264 | self.lineEdit_credit.setObjectName("lineEdit_credit") 265 | self.label_cdid = QtWidgets.QLabel(self.page_course) 266 | self.label_cdid.setGeometry(QtCore.QRect(10, 140, 101, 31)) 267 | font = QtGui.QFont() 268 | font.setFamily("Microsoft YaHei UI") 269 | font.setPointSize(11) 270 | self.label_cdid.setFont(font) 271 | self.label_cdid.setObjectName("label_cdid") 272 | self.lineEdit_cdid = QtWidgets.QLineEdit(self.page_course) 273 | self.lineEdit_cdid.setGeometry(QtCore.QRect(120, 140, 131, 31)) 274 | self.lineEdit_cdid.setObjectName("lineEdit_cdid") 275 | self.lineEdit_hours = QtWidgets.QLineEdit(self.page_course) 276 | self.lineEdit_hours.setGeometry(QtCore.QRect(580, 140, 101, 31)) 277 | self.lineEdit_hours.setObjectName("lineEdit_hours") 278 | self.label_course = QtWidgets.QLabel(self.page_course) 279 | self.label_course.setGeometry(QtCore.QRect(0, 6, 751, 41)) 280 | font = QtGui.QFont() 281 | font.setFamily("Microsoft YaHei UI") 282 | font.setPointSize(22) 283 | font.setBold(False) 284 | font.setWeight(50) 285 | self.label_course.setFont(font) 286 | self.label_course.setAlignment(QtCore.Qt.AlignCenter) 287 | self.label_course.setObjectName("label_course") 288 | self.label_course_combo = QtWidgets.QLabel(self.page_course) 289 | self.label_course_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 290 | font = QtGui.QFont() 291 | font.setFamily("Microsoft YaHei UI") 292 | font.setPointSize(11) 293 | self.label_course_combo.setFont(font) 294 | self.label_course_combo.setObjectName("label_course_combo") 295 | self.comboBox_course = QtWidgets.QComboBox(self.page_course) 296 | self.comboBox_course.setGeometry(QtCore.QRect(570, 18, 101, 31)) 297 | font = QtGui.QFont() 298 | font.setFamily("Times New Roman") 299 | font.setPointSize(11) 300 | self.comboBox_course.setFont(font) 301 | self.comboBox_course.setObjectName("comboBox_course") 302 | self.comboBox_course.addItem("") 303 | self.comboBox_course.addItem("") 304 | self.comboBox_course.addItem("") 305 | self.label_course.raise_() 306 | self.lineEdit_cname.raise_() 307 | self.label_cid.raise_() 308 | self.label_hours.raise_() 309 | self.lineEdit_cid.raise_() 310 | self.label_credit.raise_() 311 | self.label_cname.raise_() 312 | self.lineEdit_credit.raise_() 313 | self.label_cdid.raise_() 314 | self.lineEdit_cdid.raise_() 315 | self.lineEdit_hours.raise_() 316 | self.label_course_combo.raise_() 317 | self.comboBox_course.raise_() 318 | self.stackedWidget.addWidget(self.page_course) 319 | self.page_class = QtWidgets.QWidget() 320 | self.page_class.setObjectName("page_class") 321 | self.label_clid = QtWidgets.QLabel(self.page_class) 322 | self.label_clid.setGeometry(QtCore.QRect(20, 110, 41, 31)) 323 | font = QtGui.QFont() 324 | font.setFamily("Microsoft YaHei UI") 325 | font.setPointSize(11) 326 | self.label_clid.setFont(font) 327 | self.label_clid.setObjectName("label_clid") 328 | self.label_cltid = QtWidgets.QLabel(self.page_class) 329 | self.label_cltid.setGeometry(QtCore.QRect(470, 110, 101, 31)) 330 | font = QtGui.QFont() 331 | font.setFamily("Microsoft YaHei UI") 332 | font.setPointSize(11) 333 | self.label_cltid.setFont(font) 334 | self.label_cltid.setObjectName("label_cltid") 335 | self.label_cldid = QtWidgets.QLabel(self.page_class) 336 | self.label_cldid.setGeometry(QtCore.QRect(240, 110, 41, 31)) 337 | font = QtGui.QFont() 338 | font.setFamily("Microsoft YaHei UI") 339 | font.setPointSize(11) 340 | self.label_cldid.setFont(font) 341 | self.label_cldid.setObjectName("label_cldid") 342 | self.lineEdit_cldid = QtWidgets.QLineEdit(self.page_class) 343 | self.lineEdit_cldid.setGeometry(QtCore.QRect(300, 110, 131, 31)) 344 | self.lineEdit_cldid.setObjectName("lineEdit_cldid") 345 | self.lineEdit_cltid = QtWidgets.QLineEdit(self.page_class) 346 | self.lineEdit_cltid.setGeometry(QtCore.QRect(580, 110, 131, 31)) 347 | self.lineEdit_cltid.setObjectName("lineEdit_cltid") 348 | self.lineEdit_clid = QtWidgets.QLineEdit(self.page_class) 349 | self.lineEdit_clid.setGeometry(QtCore.QRect(80, 110, 131, 31)) 350 | self.lineEdit_clid.setObjectName("lineEdit_clid") 351 | self.label_class = QtWidgets.QLabel(self.page_class) 352 | self.label_class.setGeometry(QtCore.QRect(0, 3, 751, 51)) 353 | font = QtGui.QFont() 354 | font.setFamily("Microsoft YaHei UI") 355 | font.setPointSize(22) 356 | font.setBold(False) 357 | font.setWeight(50) 358 | self.label_class.setFont(font) 359 | self.label_class.setAlignment(QtCore.Qt.AlignCenter) 360 | self.label_class.setObjectName("label_class") 361 | self.label_class_combo = QtWidgets.QLabel(self.page_class) 362 | self.label_class_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 363 | font = QtGui.QFont() 364 | font.setFamily("Microsoft YaHei UI") 365 | font.setPointSize(11) 366 | self.label_class_combo.setFont(font) 367 | self.label_class_combo.setObjectName("label_class_combo") 368 | self.comboBox_class = QtWidgets.QComboBox(self.page_class) 369 | self.comboBox_class.setGeometry(QtCore.QRect(570, 18, 101, 31)) 370 | font = QtGui.QFont() 371 | font.setFamily("Times New Roman") 372 | font.setPointSize(11) 373 | self.comboBox_class.setFont(font) 374 | self.comboBox_class.setObjectName("comboBox_class") 375 | self.comboBox_class.addItem("") 376 | self.comboBox_class.addItem("") 377 | self.comboBox_class.addItem("") 378 | self.stackedWidget.addWidget(self.page_class) 379 | self.page_department = QtWidgets.QWidget() 380 | self.page_department.setObjectName("page_department") 381 | self.label_dname = QtWidgets.QLabel(self.page_department) 382 | self.label_dname.setGeometry(QtCore.QRect(380, 100, 81, 31)) 383 | font = QtGui.QFont() 384 | font.setFamily("Microsoft YaHei UI") 385 | font.setPointSize(11) 386 | self.label_dname.setFont(font) 387 | self.label_dname.setObjectName("label_dname") 388 | self.label_did = QtWidgets.QLabel(self.page_department) 389 | self.label_did.setGeometry(QtCore.QRect(150, 100, 41, 31)) 390 | font = QtGui.QFont() 391 | font.setFamily("Microsoft YaHei UI") 392 | font.setPointSize(11) 393 | self.label_did.setFont(font) 394 | self.label_did.setObjectName("label_did") 395 | self.lineEdit_dname = QtWidgets.QLineEdit(self.page_department) 396 | self.lineEdit_dname.setGeometry(QtCore.QRect(474, 100, 131, 31)) 397 | self.lineEdit_dname.setObjectName("lineEdit_dname") 398 | self.lineEdit_did = QtWidgets.QLineEdit(self.page_department) 399 | self.lineEdit_did.setGeometry(QtCore.QRect(210, 100, 131, 31)) 400 | self.lineEdit_did.setObjectName("lineEdit_did") 401 | self.label_department = QtWidgets.QLabel(self.page_department) 402 | self.label_department.setGeometry(QtCore.QRect(0, 3, 751, 51)) 403 | font = QtGui.QFont() 404 | font.setFamily("Microsoft YaHei UI") 405 | font.setPointSize(22) 406 | font.setBold(False) 407 | font.setWeight(50) 408 | self.label_department.setFont(font) 409 | self.label_department.setAlignment(QtCore.Qt.AlignCenter) 410 | self.label_department.setObjectName("label_department") 411 | self.comboBox_department = QtWidgets.QComboBox(self.page_department) 412 | self.comboBox_department.setGeometry(QtCore.QRect(570, 18, 101, 31)) 413 | font = QtGui.QFont() 414 | font.setFamily("Times New Roman") 415 | font.setPointSize(11) 416 | self.comboBox_department.setFont(font) 417 | self.comboBox_department.setObjectName("comboBox_department") 418 | self.comboBox_department.addItem("") 419 | self.comboBox_department.addItem("") 420 | self.comboBox_department.addItem("") 421 | self.label_department_combo = QtWidgets.QLabel(self.page_department) 422 | self.label_department_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 423 | font = QtGui.QFont() 424 | font.setFamily("Microsoft YaHei UI") 425 | font.setPointSize(11) 426 | self.label_department_combo.setFont(font) 427 | self.label_department_combo.setObjectName("label_department_combo") 428 | self.stackedWidget.addWidget(self.page_department) 429 | self.page_classroom = QtWidgets.QWidget() 430 | self.page_classroom.setObjectName("page_classroom") 431 | self.lineEdit_raddr = QtWidgets.QLineEdit(self.page_classroom) 432 | self.lineEdit_raddr.setGeometry(QtCore.QRect(470, 110, 131, 31)) 433 | self.lineEdit_raddr.setObjectName("lineEdit_raddr") 434 | self.lineEdit_rid = QtWidgets.QLineEdit(self.page_classroom) 435 | self.lineEdit_rid.setGeometry(QtCore.QRect(220, 110, 131, 31)) 436 | self.lineEdit_rid.setObjectName("lineEdit_rid") 437 | self.label_rid = QtWidgets.QLabel(self.page_classroom) 438 | self.label_rid.setGeometry(QtCore.QRect(140, 110, 61, 31)) 439 | font = QtGui.QFont() 440 | font.setFamily("Microsoft YaHei UI") 441 | font.setPointSize(11) 442 | self.label_rid.setFont(font) 443 | self.label_rid.setObjectName("label_rid") 444 | self.label_raddr = QtWidgets.QLabel(self.page_classroom) 445 | self.label_raddr.setGeometry(QtCore.QRect(380, 110, 81, 31)) 446 | font = QtGui.QFont() 447 | font.setFamily("Microsoft YaHei UI") 448 | font.setPointSize(11) 449 | self.label_raddr.setFont(font) 450 | self.label_raddr.setObjectName("label_raddr") 451 | self.label_classroom = QtWidgets.QLabel(self.page_classroom) 452 | self.label_classroom.setGeometry(QtCore.QRect(0, 6, 751, 41)) 453 | font = QtGui.QFont() 454 | font.setFamily("Microsoft YaHei UI") 455 | font.setPointSize(22) 456 | font.setBold(False) 457 | font.setWeight(50) 458 | self.label_classroom.setFont(font) 459 | self.label_classroom.setAlignment(QtCore.Qt.AlignCenter) 460 | self.label_classroom.setObjectName("label_classroom") 461 | self.label_classroom_combo = QtWidgets.QLabel(self.page_classroom) 462 | self.label_classroom_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 463 | font = QtGui.QFont() 464 | font.setFamily("Microsoft YaHei UI") 465 | font.setPointSize(11) 466 | self.label_classroom_combo.setFont(font) 467 | self.label_classroom_combo.setObjectName("label_classroom_combo") 468 | self.comboBox_classroom = QtWidgets.QComboBox(self.page_classroom) 469 | self.comboBox_classroom.setGeometry(QtCore.QRect(570, 18, 101, 31)) 470 | font = QtGui.QFont() 471 | font.setFamily("Times New Roman") 472 | font.setPointSize(11) 473 | self.comboBox_classroom.setFont(font) 474 | self.comboBox_classroom.setObjectName("comboBox_classroom") 475 | self.comboBox_classroom.addItem("") 476 | self.comboBox_classroom.addItem("") 477 | self.comboBox_classroom.addItem("") 478 | self.stackedWidget.addWidget(self.page_classroom) 479 | self.page_sc = QtWidgets.QWidget() 480 | self.page_sc.setObjectName("page_sc") 481 | self.label_sc = QtWidgets.QLabel(self.page_sc) 482 | self.label_sc.setGeometry(QtCore.QRect(0, 3, 751, 51)) 483 | font = QtGui.QFont() 484 | font.setFamily("Microsoft YaHei UI") 485 | font.setPointSize(22) 486 | font.setBold(False) 487 | font.setWeight(50) 488 | self.label_sc.setFont(font) 489 | self.label_sc.setAlignment(QtCore.Qt.AlignCenter) 490 | self.label_sc.setObjectName("label_sc") 491 | self.comboBox_sc = QtWidgets.QComboBox(self.page_sc) 492 | self.comboBox_sc.setGeometry(QtCore.QRect(570, 18, 101, 31)) 493 | font = QtGui.QFont() 494 | font.setFamily("Times New Roman") 495 | font.setPointSize(11) 496 | self.comboBox_sc.setFont(font) 497 | self.comboBox_sc.setObjectName("comboBox_sc") 498 | self.comboBox_sc.addItem("") 499 | self.comboBox_sc.addItem("") 500 | self.comboBox_sc.addItem("") 501 | self.label_sc_combo = QtWidgets.QLabel(self.page_sc) 502 | self.label_sc_combo.setGeometry(QtCore.QRect(530, 23, 41, 21)) 503 | font = QtGui.QFont() 504 | font.setFamily("Microsoft YaHei UI") 505 | font.setPointSize(11) 506 | self.label_sc_combo.setFont(font) 507 | self.label_sc_combo.setObjectName("label_sc_combo") 508 | self.label_scsid = QtWidgets.QLabel(self.page_sc) 509 | self.label_scsid.setGeometry(QtCore.QRect(150, 110, 41, 31)) 510 | font = QtGui.QFont() 511 | font.setFamily("Microsoft YaHei UI") 512 | font.setPointSize(11) 513 | self.label_scsid.setFont(font) 514 | self.label_scsid.setObjectName("label_scsid") 515 | self.label_sccid = QtWidgets.QLabel(self.page_sc) 516 | self.label_sccid.setGeometry(QtCore.QRect(400, 110, 41, 31)) 517 | font = QtGui.QFont() 518 | font.setFamily("Microsoft YaHei UI") 519 | font.setPointSize(11) 520 | self.label_sccid.setFont(font) 521 | self.label_sccid.setObjectName("label_sccid") 522 | self.lineEdit_scsid = QtWidgets.QLineEdit(self.page_sc) 523 | self.lineEdit_scsid.setGeometry(QtCore.QRect(210, 110, 131, 31)) 524 | self.lineEdit_scsid.setObjectName("lineEdit_scsid") 525 | self.comboBox_sccid = QtWidgets.QComboBox(self.page_sc) 526 | self.comboBox_sccid.setGeometry(QtCore.QRect(460, 110, 131, 31)) 527 | font = QtGui.QFont() 528 | font.setFamily("Times New Roman") 529 | font.setPointSize(11) 530 | self.comboBox_sccid.setFont(font) 531 | self.comboBox_sccid.setObjectName("comboBox_sccid") 532 | self.stackedWidget.addWidget(self.page_sc) 533 | self.page_sc_score = QtWidgets.QWidget() 534 | self.page_sc_score.setObjectName("page_sc_score") 535 | self.label_scsid_score = QtWidgets.QLabel(self.page_sc_score) 536 | self.label_scsid_score.setGeometry(QtCore.QRect(526, 110, 41, 31)) 537 | font = QtGui.QFont() 538 | font.setFamily("Microsoft YaHei UI") 539 | font.setPointSize(11) 540 | self.label_scsid_score.setFont(font) 541 | self.label_scsid_score.setObjectName("label_scsid_score") 542 | self.label_sc_score = QtWidgets.QLabel(self.page_sc_score) 543 | self.label_sc_score.setGeometry(QtCore.QRect(0, 3, 751, 51)) 544 | font = QtGui.QFont() 545 | font.setFamily("Microsoft YaHei UI") 546 | font.setPointSize(22) 547 | font.setBold(False) 548 | font.setWeight(50) 549 | self.label_sc_score.setFont(font) 550 | self.label_sc_score.setAlignment(QtCore.Qt.AlignCenter) 551 | self.label_sc_score.setObjectName("label_sc_score") 552 | self.lineEdit_scscore_score = QtWidgets.QLineEdit(self.page_sc_score) 553 | self.lineEdit_scscore_score.setGeometry(QtCore.QRect(320, 110, 131, 31)) 554 | self.lineEdit_scscore_score.setObjectName("lineEdit_scscore_score") 555 | self.label_sccid_score = QtWidgets.QLabel(self.page_sc_score) 556 | self.label_sccid_score.setGeometry(QtCore.QRect(10, 110, 61, 31)) 557 | font = QtGui.QFont() 558 | font.setFamily("Microsoft YaHei UI") 559 | font.setPointSize(11) 560 | self.label_sccid_score.setFont(font) 561 | self.label_sccid_score.setObjectName("label_sccid_score") 562 | self.label_scscore_score = QtWidgets.QLabel(self.page_sc_score) 563 | self.label_scscore_score.setGeometry(QtCore.QRect(270, 110, 41, 31)) 564 | font = QtGui.QFont() 565 | font.setFamily("Microsoft YaHei UI") 566 | font.setPointSize(11) 567 | self.label_scscore_score.setFont(font) 568 | self.label_scscore_score.setObjectName("label_scscore_score") 569 | self.comboBox_sccid_score = QtWidgets.QComboBox(self.page_sc_score) 570 | self.comboBox_sccid_score.setGeometry(QtCore.QRect(80, 110, 131, 31)) 571 | font = QtGui.QFont() 572 | font.setFamily("Times New Roman") 573 | font.setPointSize(11) 574 | self.comboBox_sccid_score.setFont(font) 575 | self.comboBox_sccid_score.setObjectName("comboBox_sccid_score") 576 | self.lineEdit_scsid_score = QtWidgets.QLineEdit(self.page_sc_score) 577 | self.lineEdit_scsid_score.setGeometry(QtCore.QRect(580, 110, 131, 31)) 578 | self.lineEdit_scsid_score.setObjectName("lineEdit_scsid_score") 579 | self.stackedWidget.addWidget(self.page_sc_score) 580 | self.page_stu_transcript = QtWidgets.QWidget() 581 | self.page_stu_transcript.setObjectName("page_stu_transcript") 582 | self.lineEdit_stu_trans_sid = QtWidgets.QLineEdit(self.page_stu_transcript) 583 | self.lineEdit_stu_trans_sid.setGeometry(QtCore.QRect(250, 80, 131, 31)) 584 | self.lineEdit_stu_trans_sid.setObjectName("lineEdit_stu_trans_sid") 585 | self.label_stu_trans_sname = QtWidgets.QLabel(self.page_stu_transcript) 586 | self.label_stu_trans_sname.setGeometry(QtCore.QRect(450, 80, 41, 31)) 587 | font = QtGui.QFont() 588 | font.setFamily("Microsoft YaHei UI") 589 | font.setPointSize(11) 590 | self.label_stu_trans_sname.setFont(font) 591 | self.label_stu_trans_sname.setObjectName("label_stu_trans_sname") 592 | self.label_stu_trans_sid = QtWidgets.QLabel(self.page_stu_transcript) 593 | self.label_stu_trans_sid.setGeometry(QtCore.QRect(200, 80, 41, 31)) 594 | font = QtGui.QFont() 595 | font.setFamily("Microsoft YaHei UI") 596 | font.setPointSize(11) 597 | self.label_stu_trans_sid.setFont(font) 598 | self.label_stu_trans_sid.setObjectName("label_stu_trans_sid") 599 | self.label_stu_transcript = QtWidgets.QLabel(self.page_stu_transcript) 600 | self.label_stu_transcript.setGeometry(QtCore.QRect(0, 3, 751, 51)) 601 | font = QtGui.QFont() 602 | font.setFamily("Microsoft YaHei UI") 603 | font.setPointSize(22) 604 | font.setBold(False) 605 | font.setWeight(50) 606 | self.label_stu_transcript.setFont(font) 607 | self.label_stu_transcript.setAlignment(QtCore.Qt.AlignCenter) 608 | self.label_stu_transcript.setObjectName("label_stu_transcript") 609 | self.lineEdit_stu_trans_sname = QtWidgets.QLineEdit(self.page_stu_transcript) 610 | self.lineEdit_stu_trans_sname.setGeometry(QtCore.QRect(500, 80, 131, 31)) 611 | self.lineEdit_stu_trans_sname.setObjectName("lineEdit_stu_trans_sname") 612 | self.label_stu_transcript_hint = QtWidgets.QLabel(self.page_stu_transcript) 613 | self.label_stu_transcript_hint.setGeometry(QtCore.QRect(0, 130, 751, 31)) 614 | font = QtGui.QFont() 615 | font.setFamily("Microsoft YaHei UI") 616 | font.setPointSize(12) 617 | font.setBold(False) 618 | font.setWeight(50) 619 | self.label_stu_transcript_hint.setFont(font) 620 | self.label_stu_transcript_hint.setAlignment(QtCore.Qt.AlignCenter) 621 | self.label_stu_transcript_hint.setObjectName("label_stu_transcript_hint") 622 | self.radioButton_have_score = QtWidgets.QRadioButton(self.page_stu_transcript) 623 | self.radioButton_have_score.setGeometry(QtCore.QRect(40, 80, 121, 31)) 624 | font = QtGui.QFont() 625 | font.setFamily("Microsoft YaHei UI") 626 | font.setPointSize(11) 627 | self.radioButton_have_score.setFont(font) 628 | self.radioButton_have_score.setObjectName("radioButton_have_score") 629 | self.stackedWidget.addWidget(self.page_stu_transcript) 630 | self.page_course_transcript = QtWidgets.QWidget() 631 | self.page_course_transcript.setObjectName("page_course_transcript") 632 | self.label_course_trans_cid = QtWidgets.QLabel(self.page_course_transcript) 633 | self.label_course_trans_cid.setGeometry(QtCore.QRect(100, 80, 61, 31)) 634 | font = QtGui.QFont() 635 | font.setFamily("Microsoft YaHei UI") 636 | font.setPointSize(11) 637 | self.label_course_trans_cid.setFont(font) 638 | self.label_course_trans_cid.setObjectName("label_course_trans_cid") 639 | self.label_course_trans_cname = QtWidgets.QLabel(self.page_course_transcript) 640 | self.label_course_trans_cname.setGeometry(QtCore.QRect(410, 80, 61, 31)) 641 | font = QtGui.QFont() 642 | font.setFamily("Microsoft YaHei UI") 643 | font.setPointSize(11) 644 | self.label_course_trans_cname.setFont(font) 645 | self.label_course_trans_cname.setObjectName("label_course_trans_cname") 646 | self.lineEdit_course_trans_cname = QtWidgets.QLineEdit(self.page_course_transcript) 647 | self.lineEdit_course_trans_cname.setGeometry(QtCore.QRect(480, 80, 131, 31)) 648 | self.lineEdit_course_trans_cname.setObjectName("lineEdit_course_trans_cname") 649 | self.lineEdit_course_trans_cid = QtWidgets.QLineEdit(self.page_course_transcript) 650 | self.lineEdit_course_trans_cid.setGeometry(QtCore.QRect(170, 80, 131, 31)) 651 | self.lineEdit_course_trans_cid.setObjectName("lineEdit_course_trans_cid") 652 | self.label_course_transcript = QtWidgets.QLabel(self.page_course_transcript) 653 | self.label_course_transcript.setGeometry(QtCore.QRect(0, 7, 751, 41)) 654 | font = QtGui.QFont() 655 | font.setFamily("Microsoft YaHei UI") 656 | font.setPointSize(22) 657 | font.setBold(False) 658 | font.setWeight(50) 659 | self.label_course_transcript.setFont(font) 660 | self.label_course_transcript.setAlignment(QtCore.Qt.AlignCenter) 661 | self.label_course_transcript.setObjectName("label_course_transcript") 662 | self.label_course_transcript_hint = QtWidgets.QLabel(self.page_course_transcript) 663 | self.label_course_transcript_hint.setGeometry(QtCore.QRect(0, 130, 751, 31)) 664 | font = QtGui.QFont() 665 | font.setFamily("Microsoft YaHei UI") 666 | font.setPointSize(12) 667 | font.setBold(False) 668 | font.setWeight(50) 669 | self.label_course_transcript_hint.setFont(font) 670 | self.label_course_transcript_hint.setAlignment(QtCore.Qt.AlignCenter) 671 | self.label_course_transcript_hint.setObjectName("label_course_transcript_hint") 672 | self.stackedWidget.addWidget(self.page_course_transcript) 673 | self.page_tt = QtWidgets.QWidget() 674 | self.page_tt.setObjectName("page_tt") 675 | self.comboBox_tt = QtWidgets.QComboBox(self.page_tt) 676 | self.comboBox_tt.setGeometry(QtCore.QRect(570, 18, 101, 31)) 677 | font = QtGui.QFont() 678 | font.setFamily("Times New Roman") 679 | font.setPointSize(11) 680 | self.comboBox_tt.setFont(font) 681 | self.comboBox_tt.setObjectName("comboBox_tt") 682 | self.comboBox_tt.addItem("") 683 | self.comboBox_tt.addItem("") 684 | self.comboBox_tt.addItem("") 685 | self.label_tt = QtWidgets.QLabel(self.page_tt) 686 | self.label_tt.setGeometry(QtCore.QRect(0, 3, 751, 41)) 687 | font = QtGui.QFont() 688 | font.setFamily("Microsoft YaHei UI") 689 | font.setPointSize(22) 690 | font.setBold(False) 691 | font.setWeight(50) 692 | self.label_tt.setFont(font) 693 | self.label_tt.setAlignment(QtCore.Qt.AlignCenter) 694 | self.label_tt.setObjectName("label_tt") 695 | self.label_tt_combo = QtWidgets.QLabel(self.page_tt) 696 | self.label_tt_combo.setGeometry(QtCore.QRect(520, 23, 41, 21)) 697 | font = QtGui.QFont() 698 | font.setFamily("Microsoft YaHei UI") 699 | font.setPointSize(11) 700 | self.label_tt_combo.setFont(font) 701 | self.label_tt_combo.setObjectName("label_tt_combo") 702 | self.label_tttid = QtWidgets.QLabel(self.page_tt) 703 | self.label_tttid.setGeometry(QtCore.QRect(400, 80, 81, 31)) 704 | font = QtGui.QFont() 705 | font.setFamily("Microsoft YaHei UI") 706 | font.setPointSize(11) 707 | self.label_tttid.setFont(font) 708 | self.label_tttid.setObjectName("label_tttid") 709 | self.comboBox_ttcid = QtWidgets.QComboBox(self.page_tt) 710 | self.comboBox_ttcid.setGeometry(QtCore.QRect(190, 80, 131, 31)) 711 | font = QtGui.QFont() 712 | font.setFamily("Times New Roman") 713 | font.setPointSize(11) 714 | self.comboBox_ttcid.setFont(font) 715 | self.comboBox_ttcid.setObjectName("comboBox_ttcid") 716 | self.label_ttcid = QtWidgets.QLabel(self.page_tt) 717 | self.label_ttcid.setGeometry(QtCore.QRect(120, 80, 61, 31)) 718 | font = QtGui.QFont() 719 | font.setFamily("Microsoft YaHei UI") 720 | font.setPointSize(11) 721 | self.label_ttcid.setFont(font) 722 | self.label_ttcid.setObjectName("label_ttcid") 723 | self.comboBox_tttid = QtWidgets.QComboBox(self.page_tt) 724 | self.comboBox_tttid.setGeometry(QtCore.QRect(490, 80, 131, 31)) 725 | font = QtGui.QFont() 726 | font.setFamily("Times New Roman") 727 | font.setPointSize(11) 728 | self.comboBox_tttid.setFont(font) 729 | self.comboBox_tttid.setObjectName("comboBox_tttid") 730 | self.lineEdit_startweek = QtWidgets.QLineEdit(self.page_tt) 731 | self.lineEdit_startweek.setGeometry(QtCore.QRect(190, 140, 131, 31)) 732 | self.lineEdit_startweek.setObjectName("lineEdit_startweek") 733 | self.label_tt_startweek = QtWidgets.QLabel(self.page_tt) 734 | self.label_tt_startweek.setGeometry(QtCore.QRect(100, 140, 71, 31)) 735 | font = QtGui.QFont() 736 | font.setFamily("Microsoft YaHei UI") 737 | font.setPointSize(11) 738 | self.label_tt_startweek.setFont(font) 739 | self.label_tt_startweek.setObjectName("label_tt_startweek") 740 | self.lineEdit_endweek = QtWidgets.QLineEdit(self.page_tt) 741 | self.lineEdit_endweek.setGeometry(QtCore.QRect(490, 140, 131, 31)) 742 | self.lineEdit_endweek.setObjectName("lineEdit_endweek") 743 | self.label_tt_endweek = QtWidgets.QLabel(self.page_tt) 744 | self.label_tt_endweek.setGeometry(QtCore.QRect(400, 140, 71, 31)) 745 | font = QtGui.QFont() 746 | font.setFamily("Microsoft YaHei UI") 747 | font.setPointSize(11) 748 | self.label_tt_endweek.setFont(font) 749 | self.label_tt_endweek.setObjectName("label_tt_endweek") 750 | self.label_tt.raise_() 751 | self.comboBox_tt.raise_() 752 | self.label_tt_combo.raise_() 753 | self.label_tttid.raise_() 754 | self.comboBox_ttcid.raise_() 755 | self.label_ttcid.raise_() 756 | self.comboBox_tttid.raise_() 757 | self.lineEdit_startweek.raise_() 758 | self.label_tt_startweek.raise_() 759 | self.lineEdit_endweek.raise_() 760 | self.label_tt_endweek.raise_() 761 | self.stackedWidget.addWidget(self.page_tt) 762 | self.page_ttr = QtWidgets.QWidget() 763 | self.page_ttr.setObjectName("page_ttr") 764 | self.label_ttrdayno = QtWidgets.QLabel(self.page_ttr) 765 | self.label_ttrdayno.setGeometry(QtCore.QRect(450, 80, 51, 31)) 766 | font = QtGui.QFont() 767 | font.setFamily("Microsoft YaHei UI") 768 | font.setPointSize(11) 769 | self.label_ttrdayno.setFont(font) 770 | self.label_ttrdayno.setObjectName("label_ttrdayno") 771 | self.comboBox_ttr = QtWidgets.QComboBox(self.page_ttr) 772 | self.comboBox_ttr.setGeometry(QtCore.QRect(570, 18, 101, 31)) 773 | font = QtGui.QFont() 774 | font.setFamily("Times New Roman") 775 | font.setPointSize(11) 776 | self.comboBox_ttr.setFont(font) 777 | self.comboBox_ttr.setObjectName("comboBox_ttr") 778 | self.comboBox_ttr.addItem("") 779 | self.comboBox_ttr.addItem("") 780 | self.comboBox_ttr.addItem("") 781 | self.label_ttrrid = QtWidgets.QLabel(self.page_ttr) 782 | self.label_ttrrid.setGeometry(QtCore.QRect(420, 140, 71, 31)) 783 | font = QtGui.QFont() 784 | font.setFamily("Microsoft YaHei UI") 785 | font.setPointSize(11) 786 | self.label_ttrrid.setFont(font) 787 | self.label_ttrrid.setObjectName("label_ttrrid") 788 | self.label_ttr_combo = QtWidgets.QLabel(self.page_ttr) 789 | self.label_ttr_combo.setGeometry(QtCore.QRect(530, 23, 41, 21)) 790 | font = QtGui.QFont() 791 | font.setFamily("Microsoft YaHei UI") 792 | font.setPointSize(11) 793 | self.label_ttr_combo.setFont(font) 794 | self.label_ttr_combo.setObjectName("label_ttr_combo") 795 | self.comboBox_ttr_cidtid = QtWidgets.QComboBox(self.page_ttr) 796 | self.comboBox_ttr_cidtid.setGeometry(QtCore.QRect(170, 80, 221, 31)) 797 | font = QtGui.QFont() 798 | font.setFamily("Times New Roman") 799 | font.setPointSize(11) 800 | self.comboBox_ttr_cidtid.setFont(font) 801 | self.comboBox_ttr_cidtid.setObjectName("comboBox_ttr_cidtid") 802 | self.label_ttr = QtWidgets.QLabel(self.page_ttr) 803 | self.label_ttr.setGeometry(QtCore.QRect(0, 3, 751, 41)) 804 | font = QtGui.QFont() 805 | font.setFamily("Microsoft YaHei UI") 806 | font.setPointSize(22) 807 | font.setBold(False) 808 | font.setWeight(50) 809 | self.label_ttr.setFont(font) 810 | self.label_ttr.setAlignment(QtCore.Qt.AlignCenter) 811 | self.label_ttr.setObjectName("label_ttr") 812 | self.label_ttr_cidtid = QtWidgets.QLabel(self.page_ttr) 813 | self.label_ttr_cidtid.setGeometry(QtCore.QRect(20, 80, 141, 31)) 814 | font = QtGui.QFont() 815 | font.setFamily("Microsoft YaHei UI") 816 | font.setPointSize(11) 817 | self.label_ttr_cidtid.setFont(font) 818 | self.label_ttr_cidtid.setObjectName("label_ttr_cidtid") 819 | self.comboBox_ttrdayno = QtWidgets.QComboBox(self.page_ttr) 820 | self.comboBox_ttrdayno.setGeometry(QtCore.QRect(500, 80, 31, 31)) 821 | font = QtGui.QFont() 822 | font.setFamily("Times New Roman") 823 | font.setPointSize(11) 824 | self.comboBox_ttrdayno.setFont(font) 825 | self.comboBox_ttrdayno.setObjectName("comboBox_ttrdayno") 826 | self.comboBox_ttrdayno.addItem("") 827 | self.comboBox_ttrdayno.setItemText(0, "") 828 | self.comboBox_ttrdayno.addItem("") 829 | self.comboBox_ttrdayno.addItem("") 830 | self.comboBox_ttrdayno.addItem("") 831 | self.comboBox_ttrdayno.addItem("") 832 | self.comboBox_ttrdayno.addItem("") 833 | self.comboBox_ttrdayno.addItem("") 834 | self.comboBox_ttrdayno.addItem("") 835 | self.comboBox_ttrclassno = QtWidgets.QComboBox(self.page_ttr) 836 | self.comboBox_ttrclassno.setGeometry(QtCore.QRect(170, 140, 81, 31)) 837 | font = QtGui.QFont() 838 | font.setFamily("Times New Roman") 839 | font.setPointSize(11) 840 | self.comboBox_ttrclassno.setFont(font) 841 | self.comboBox_ttrclassno.setObjectName("comboBox_ttrclassno") 842 | self.comboBox_ttrclassno.addItem("") 843 | self.comboBox_ttrclassno.setItemText(0, "") 844 | self.comboBox_ttrclassno.addItem("") 845 | self.comboBox_ttrclassno.addItem("") 846 | self.comboBox_ttrclassno.addItem("") 847 | self.comboBox_ttrclassno.addItem("") 848 | self.comboBox_ttrclassno.addItem("") 849 | self.comboBox_ttrclassno.addItem("") 850 | self.label_ttrclassno = QtWidgets.QLabel(self.page_ttr) 851 | self.label_ttrclassno.setGeometry(QtCore.QRect(120, 140, 41, 31)) 852 | font = QtGui.QFont() 853 | font.setFamily("Microsoft YaHei UI") 854 | font.setPointSize(11) 855 | self.label_ttrclassno.setFont(font) 856 | self.label_ttrclassno.setObjectName("label_ttrclassno") 857 | self.comboBox_ttrrid = QtWidgets.QComboBox(self.page_ttr) 858 | self.comboBox_ttrrid.setGeometry(QtCore.QRect(500, 140, 221, 31)) 859 | font = QtGui.QFont() 860 | font.setFamily("Times New Roman") 861 | font.setPointSize(11) 862 | self.comboBox_ttrrid.setFont(font) 863 | self.comboBox_ttrrid.setObjectName("comboBox_ttrrid") 864 | self.stackedWidget.addWidget(self.page_ttr) 865 | self.pushButton_confirm = QtWidgets.QPushButton(self.centralwidget) 866 | self.pushButton_confirm.setGeometry(QtCore.QRect(790, 60, 121, 51)) 867 | font = QtGui.QFont() 868 | font.setFamily("Microsoft JhengHei UI") 869 | font.setPointSize(11) 870 | self.pushButton_confirm.setFont(font) 871 | self.pushButton_confirm.setObjectName("pushButton_confirm") 872 | self.pushButton_confirm.clicked.connect(self.confirm) 873 | 874 | self.pushButton_clear = QtWidgets.QPushButton(self.centralwidget) 875 | self.pushButton_clear.setGeometry(QtCore.QRect(790, 130, 121, 51)) 876 | font = QtGui.QFont() 877 | font.setFamily("Microsoft JhengHei UI") 878 | font.setPointSize(11) 879 | self.pushButton_clear.setFont(font) 880 | self.pushButton_clear.setObjectName("pushButton_clear") 881 | self.pushButton_clear.clicked.connect(self.clear) 882 | 883 | self.tableView = QtWidgets.QTableView(self.centralwidget) 884 | self.tableView.setGeometry(QtCore.QRect(10, 240, 901, 491)) 885 | self.tableView.setObjectName("tableView") 886 | MainWindow.setCentralWidget(self.centralwidget) 887 | self.statusbar = QtWidgets.QStatusBar(MainWindow) 888 | self.statusbar.setObjectName("statusbar") 889 | MainWindow.setStatusBar(self.statusbar) 890 | self.menubar = QtWidgets.QMenuBar(MainWindow) 891 | self.menubar.setGeometry(QtCore.QRect(0, 0, 930, 26)) 892 | self.menubar.setObjectName("menubar") 893 | self.menu_base = QtWidgets.QMenu(self.menubar) 894 | self.menu_base.setObjectName("menu_base") 895 | self.menu_others = QtWidgets.QMenu(self.menubar) 896 | self.menu_others.setObjectName("menu_others") 897 | MainWindow.setMenuBar(self.menubar) 898 | self.action_student = QtWidgets.QAction(MainWindow) 899 | self.action_student.setCheckable(False) 900 | icon = QtGui.QIcon() 901 | icon.addPixmap(QtGui.QPixmap("icons/student.png"), QtGui.QIcon.Selected, QtGui.QIcon.On) 902 | self.action_student.setIcon(icon) 903 | self.action_student.setObjectName("action_student") 904 | self.action_teacher = QtWidgets.QAction(MainWindow) 905 | icon1 = QtGui.QIcon() 906 | icon1.addPixmap(QtGui.QPixmap("icons/teacher.png"), QtGui.QIcon.Selected, QtGui.QIcon.On) 907 | self.action_teacher.setIcon(icon1) 908 | self.action_teacher.setObjectName("action_teacher") 909 | self.action_course = QtWidgets.QAction(MainWindow) 910 | icon2 = QtGui.QIcon() 911 | icon2.addPixmap(QtGui.QPixmap("icons/course.png"), QtGui.QIcon.Selected, QtGui.QIcon.On) 912 | self.action_course.setIcon(icon2) 913 | self.action_course.setObjectName("action_course") 914 | self.action_class = QtWidgets.QAction(MainWindow) 915 | icon3 = QtGui.QIcon() 916 | icon3.addPixmap(QtGui.QPixmap("icons/class.png"), QtGui.QIcon.Selected, QtGui.QIcon.On) 917 | self.action_class.setIcon(icon3) 918 | self.action_class.setObjectName("action_class") 919 | self.action_department = QtWidgets.QAction(MainWindow) 920 | icon4 = QtGui.QIcon() 921 | icon4.addPixmap(QtGui.QPixmap("icons/department.png"), QtGui.QIcon.Selected, QtGui.QIcon.On) 922 | self.action_department.setIcon(icon4) 923 | self.action_department.setObjectName("action_department") 924 | self.action_classroom = QtWidgets.QAction(MainWindow) 925 | icon5 = QtGui.QIcon() 926 | icon5.addPixmap(QtGui.QPixmap("icons/classroom.png"), QtGui.QIcon.Selected, QtGui.QIcon.On) 927 | self.action_classroom.setIcon(icon5) 928 | self.action_classroom.setObjectName("action_classroom") 929 | self.action_sc = QtWidgets.QAction(MainWindow) 930 | icon6 = QtGui.QIcon() 931 | icon6.addPixmap(QtGui.QPixmap("icons/sc.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 932 | self.action_sc.setIcon(icon6) 933 | self.action_sc.setObjectName("action_sc") 934 | self.action_sc_score = QtWidgets.QAction(MainWindow) 935 | icon7 = QtGui.QIcon() 936 | icon7.addPixmap(QtGui.QPixmap("icons/sc_score.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 937 | self.action_sc_score.setIcon(icon7) 938 | self.action_sc_score.setObjectName("action_sc_score") 939 | self.action_stu_transcript = QtWidgets.QAction(MainWindow) 940 | icon8 = QtGui.QIcon() 941 | icon8.addPixmap(QtGui.QPixmap("icons/student_transcript.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 942 | self.action_stu_transcript.setIcon(icon8) 943 | self.action_stu_transcript.setObjectName("action_stu_transcript") 944 | self.action_course_transcript = QtWidgets.QAction(MainWindow) 945 | icon9 = QtGui.QIcon() 946 | icon9.addPixmap(QtGui.QPixmap("icons/course_transcript.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 947 | self.action_course_transcript.setIcon(icon9) 948 | self.action_course_transcript.setObjectName("action_course_transcript") 949 | self.action_tt = QtWidgets.QAction(MainWindow) 950 | icon10 = QtGui.QIcon() 951 | icon10.addPixmap(QtGui.QPixmap("icons/tt.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 952 | self.action_tt.setIcon(icon10) 953 | self.action_tt.setObjectName("action_tt") 954 | self.action_ttr = QtWidgets.QAction(MainWindow) 955 | icon11 = QtGui.QIcon() 956 | icon11.addPixmap(QtGui.QPixmap("icons/ttr.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) 957 | self.action_ttr.setIcon(icon11) 958 | self.action_ttr.setObjectName("action_ttr") 959 | self.menu_base.addAction(self.action_student) 960 | self.menu_base.addAction(self.action_teacher) 961 | self.menu_base.addAction(self.action_course) 962 | self.menu_base.addAction(self.action_class) 963 | self.menu_base.addAction(self.action_department) 964 | self.menu_base.addAction(self.action_classroom) 965 | self.menu_others.addAction(self.action_sc) 966 | self.menu_others.addAction(self.action_sc_score) 967 | self.menu_others.addAction(self.action_stu_transcript) 968 | self.menu_others.addAction(self.action_course_transcript) 969 | self.menu_others.addAction(self.action_tt) 970 | self.menu_others.addAction(self.action_ttr) 971 | self.menubar.addAction(self.menu_base.menuAction()) 972 | self.menubar.addAction(self.menu_others.menuAction()) 973 | 974 | self.retranslateUi(MainWindow) 975 | self.stackedWidget.setCurrentIndex(0) 976 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 977 | 978 | def retranslateUi(self, MainWindow): 979 | _translate = QtCore.QCoreApplication.translate 980 | MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) 981 | self.label_sid.setText(_translate("MainWindow", "学号")) 982 | self.label_sclass.setText(_translate("MainWindow", "班号")) 983 | self.label_sage.setText(_translate("MainWindow", "年龄")) 984 | self.label_sname.setText(_translate("MainWindow", "姓名")) 985 | self.label_ssex.setText(_translate("MainWindow", "性别")) 986 | self.label_stel.setText(_translate("MainWindow", "联系方式")) 987 | self.label_student.setText(_translate("MainWindow", "学生信息")) 988 | self.comboBox_student.setItemText(0, _translate("MainWindow", "SELECT")) 989 | self.comboBox_student.setItemText(1, _translate("MainWindow", "INSERT")) 990 | self.comboBox_student.setItemText(2, _translate("MainWindow", "DELETE")) 991 | self.label_student_combo.setText(_translate("MainWindow", "操作")) 992 | self.label_tid.setText(_translate("MainWindow", "教师编号")) 993 | self.label_tdid.setText(_translate("MainWindow", "系号")) 994 | self.label_tage.setText(_translate("MainWindow", "年龄")) 995 | self.label_tname.setText(_translate("MainWindow", "姓名")) 996 | self.label_tsex.setText(_translate("MainWindow", "性别")) 997 | self.label_ttel.setText(_translate("MainWindow", "联系方式")) 998 | self.label_teacher.setText(_translate("MainWindow", "教师信息")) 999 | self.label_teacher_combo.setText(_translate("MainWindow", "操作")) 1000 | self.comboBox_teacher.setItemText(0, _translate("MainWindow", "SELECT")) 1001 | self.comboBox_teacher.setItemText(1, _translate("MainWindow", "INSERT")) 1002 | self.comboBox_teacher.setItemText(2, _translate("MainWindow", "DELETE")) 1003 | self.label_cid.setText(_translate("MainWindow", "课程编号")) 1004 | self.label_hours.setText(_translate("MainWindow", "学时")) 1005 | self.label_credit.setText(_translate("MainWindow", "学分")) 1006 | self.label_cname.setText(_translate("MainWindow", "课程名称")) 1007 | self.label_cdid.setText(_translate("MainWindow", "开课院系号")) 1008 | self.label_course.setText(_translate("MainWindow", "课程信息")) 1009 | self.label_course_combo.setText(_translate("MainWindow", "操作")) 1010 | self.comboBox_course.setItemText(0, _translate("MainWindow", "SELECT")) 1011 | self.comboBox_course.setItemText(1, _translate("MainWindow", "INSERT")) 1012 | self.comboBox_course.setItemText(2, _translate("MainWindow", "DELETE")) 1013 | self.label_clid.setText(_translate("MainWindow", "班号")) 1014 | self.label_cltid.setText(_translate("MainWindow", "班主任编号")) 1015 | self.label_cldid.setText(_translate("MainWindow", "系号")) 1016 | self.label_class.setText(_translate("MainWindow", "班级信息")) 1017 | self.label_class_combo.setText(_translate("MainWindow", "操作")) 1018 | self.comboBox_class.setItemText(0, _translate("MainWindow", "SELECT")) 1019 | self.comboBox_class.setItemText(1, _translate("MainWindow", "INSERT")) 1020 | self.comboBox_class.setItemText(2, _translate("MainWindow", "DELETE")) 1021 | self.label_dname.setText(_translate("MainWindow", "院系名称")) 1022 | self.label_did.setText(_translate("MainWindow", "系号")) 1023 | self.label_department.setText(_translate("MainWindow", "院系信息")) 1024 | self.comboBox_department.setItemText(0, _translate("MainWindow", "SELECT")) 1025 | self.comboBox_department.setItemText(1, _translate("MainWindow", "INSERT")) 1026 | self.comboBox_department.setItemText(2, _translate("MainWindow", "DELETE")) 1027 | self.label_department_combo.setText(_translate("MainWindow", "操作")) 1028 | self.label_rid.setText(_translate("MainWindow", "教室号")) 1029 | self.label_raddr.setText(_translate("MainWindow", "教室地点")) 1030 | self.label_classroom.setText(_translate("MainWindow", "教室信息")) 1031 | self.label_classroom_combo.setText(_translate("MainWindow", "操作")) 1032 | self.comboBox_classroom.setItemText(0, _translate("MainWindow", "SELECT")) 1033 | self.comboBox_classroom.setItemText(1, _translate("MainWindow", "INSERT")) 1034 | self.comboBox_classroom.setItemText(2, _translate("MainWindow", "DELETE")) 1035 | self.label_sc.setText(_translate("MainWindow", "学生选课")) 1036 | self.comboBox_sc.setItemText(0, _translate("MainWindow", "SELECT")) 1037 | self.comboBox_sc.setItemText(1, _translate("MainWindow", "INSERT")) 1038 | self.comboBox_sc.setItemText(2, _translate("MainWindow", "DELETE")) 1039 | self.label_sc_combo.setText(_translate("MainWindow", "操作")) 1040 | self.label_scsid.setText(_translate("MainWindow", "学号")) 1041 | self.label_sccid.setText(_translate("MainWindow", "课程")) 1042 | self.label_scsid_score.setText(_translate("MainWindow", "学号")) 1043 | self.label_sc_score.setText(_translate("MainWindow", "课程成绩录入")) 1044 | self.label_sccid_score.setText(_translate("MainWindow", "课程号")) 1045 | self.label_scscore_score.setText(_translate("MainWindow", "得分")) 1046 | self.label_stu_trans_sname.setText(_translate("MainWindow", "姓名")) 1047 | self.label_stu_trans_sid.setText(_translate("MainWindow", "学号")) 1048 | self.label_stu_transcript.setText(_translate("MainWindow", "学生查询成绩")) 1049 | self.label_stu_transcript_hint.setText(_translate("MainWindow", "请输入正确的学号和对应的姓名,否则无法查询!!!")) 1050 | self.radioButton_have_score.setText(_translate("MainWindow", "是否出成绩")) 1051 | self.label_course_trans_cid.setText(_translate("MainWindow", "课程号")) 1052 | self.label_course_trans_cname.setText(_translate("MainWindow", "课程名")) 1053 | self.label_course_transcript.setText(_translate("MainWindow", "课程成绩单")) 1054 | self.label_course_transcript_hint.setText(_translate("MainWindow", "请输入正确的课程号(可以不输入课程名,若输入则一定要正确)")) 1055 | self.comboBox_tt.setItemText(0, _translate("MainWindow", "SELECT")) 1056 | self.comboBox_tt.setItemText(1, _translate("MainWindow", "INSERT")) 1057 | self.comboBox_tt.setItemText(2, _translate("MainWindow", "DELETE")) 1058 | self.label_tt.setText(_translate("MainWindow", "教学任务安排")) 1059 | self.label_tt_combo.setText(_translate("MainWindow", "操作")) 1060 | self.label_tttid.setText(_translate("MainWindow", "教师编号")) 1061 | self.label_ttcid.setText(_translate("MainWindow", "课程号")) 1062 | self.label_tt_startweek.setText(_translate("MainWindow", "开课星期")) 1063 | self.label_tt_endweek.setText(_translate("MainWindow", "结课星期")) 1064 | self.label_ttrdayno.setText(_translate("MainWindow", "星期")) 1065 | self.comboBox_ttr.setItemText(0, _translate("MainWindow", "SELECT")) 1066 | self.comboBox_ttr.setItemText(1, _translate("MainWindow", "INSERT")) 1067 | self.comboBox_ttr.setItemText(2, _translate("MainWindow", "DELETE")) 1068 | self.label_ttrrid.setText(_translate("MainWindow", "教室编号")) 1069 | self.label_ttr_combo.setText(_translate("MainWindow", "操作")) 1070 | self.label_ttr.setText(_translate("MainWindow", "教学教室安排")) 1071 | self.label_ttr_cidtid.setText(_translate("MainWindow", "课程号-教师编号")) 1072 | self.comboBox_ttrdayno.setItemText(1, _translate("MainWindow", "1")) 1073 | self.comboBox_ttrdayno.setItemText(2, _translate("MainWindow", "2")) 1074 | self.comboBox_ttrdayno.setItemText(3, _translate("MainWindow", "3")) 1075 | self.comboBox_ttrdayno.setItemText(4, _translate("MainWindow", "4")) 1076 | self.comboBox_ttrdayno.setItemText(5, _translate("MainWindow", "5")) 1077 | self.comboBox_ttrdayno.setItemText(6, _translate("MainWindow", "6")) 1078 | self.comboBox_ttrdayno.setItemText(7, _translate("MainWindow", "7")) 1079 | self.comboBox_ttrclassno.setItemText(1, _translate("MainWindow", "1(1~2节)")) 1080 | self.comboBox_ttrclassno.setItemText(2, _translate("MainWindow", "2(3~4节)")) 1081 | self.comboBox_ttrclassno.setItemText(3, _translate("MainWindow", "3(5~6节)")) 1082 | self.comboBox_ttrclassno.setItemText(4, _translate("MainWindow", "4(7~8节)")) 1083 | self.comboBox_ttrclassno.setItemText(5, _translate("MainWindow", "5(9~10节)")) 1084 | self.comboBox_ttrclassno.setItemText(6, _translate("MainWindow", "6(11~12节)")) 1085 | self.label_ttrclassno.setText(_translate("MainWindow", "节次")) 1086 | self.pushButton_confirm.setText(_translate("MainWindow", "确认")) 1087 | self.pushButton_clear.setText(_translate("MainWindow", "清除")) 1088 | self.menu_base.setTitle(_translate("MainWindow", "基础信息")) 1089 | self.menu_others.setTitle(_translate("MainWindow", "其他")) 1090 | self.action_student.setText(_translate("MainWindow", "学生")) 1091 | self.action_student.setShortcut(_translate("MainWindow", "Ctrl+Shift+S")) 1092 | self.action_teacher.setText(_translate("MainWindow", "教师")) 1093 | self.action_teacher.setShortcut(_translate("MainWindow", "Ctrl+Shift+T")) 1094 | self.action_course.setText(_translate("MainWindow", "课程")) 1095 | self.action_course.setShortcut(_translate("MainWindow", "Ctrl+Shift+C")) 1096 | self.action_class.setText(_translate("MainWindow", "班级")) 1097 | self.action_class.setShortcut(_translate("MainWindow", "Ctrl+Shift+X")) 1098 | self.action_department.setText(_translate("MainWindow", "院系")) 1099 | self.action_department.setShortcut(_translate("MainWindow", "Ctrl+Shift+D")) 1100 | self.action_classroom.setText(_translate("MainWindow", "教室")) 1101 | self.action_classroom.setShortcut(_translate("MainWindow", "Ctrl+Shift+R")) 1102 | self.action_sc.setText(_translate("MainWindow", "学生选课")) 1103 | self.action_sc_score.setText(_translate("MainWindow", "学生成绩录入")) 1104 | self.action_stu_transcript.setText(_translate("MainWindow", "学生成绩单")) 1105 | self.action_course_transcript.setText(_translate("MainWindow", "课程成绩单")) 1106 | self.action_tt.setText(_translate("MainWindow", "教学任务安排")) 1107 | self.action_ttr.setText(_translate("MainWindow", "教学-教室安排")) 1108 | 1109 | self.action_student.triggered.connect(self.page_student_show) 1110 | self.action_teacher.triggered.connect(self.page_teacher_show) 1111 | self.action_course.triggered.connect(self.page_course_show) 1112 | self.action_class.triggered.connect(self.page_class_show) 1113 | self.action_department.triggered.connect(self.page_department_show) 1114 | self.action_classroom.triggered.connect(self.page_classroom_show) 1115 | self.action_sc.triggered.connect(self.page_sc_show) 1116 | self.action_sc_score.triggered.connect(self.page_sc_score_show) 1117 | self.action_stu_transcript.triggered.connect(self.page_stu_transcript_show) 1118 | self.action_course_transcript.triggered.connect(self.page_course_transcript_show) 1119 | self.action_tt.triggered.connect(self.page_tt_show) 1120 | self.action_ttr.triggered.connect(self.page_ttr_show) 1121 | # 学生成绩录入 1122 | # 课程成绩单 1123 | # 学生成绩单 1124 | 1125 | def page_student_show(self): 1126 | self.stackedWidget.setCurrentWidget(self.page_student) 1127 | 1128 | def page_teacher_show(self): 1129 | self.stackedWidget.setCurrentWidget(self.page_teacher) 1130 | 1131 | def page_course_show(self): 1132 | self.stackedWidget.setCurrentWidget(self.page_course) 1133 | 1134 | def page_class_show(self): 1135 | self.stackedWidget.setCurrentWidget(self.page_class) 1136 | 1137 | def page_department_show(self): 1138 | self.stackedWidget.setCurrentWidget(self.page_department) 1139 | 1140 | def page_classroom_show(self): 1141 | self.stackedWidget.setCurrentWidget(self.page_classroom) 1142 | 1143 | def page_sc_show(self): 1144 | self.stackedWidget.setCurrentWidget(self.page_sc) 1145 | self.comboBox_sccid.clear() 1146 | self.comboBox_sccid.addItem("") 1147 | try: 1148 | self.cursor.execute("select c_id from course;") 1149 | result = self.cursor.fetchall() 1150 | for col, key in enumerate(result): 1151 | self.comboBox_sccid.addItem(str(key[0])) 1152 | except pymysql.Error as e: 1153 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1154 | 1155 | def page_sc_score_show(self): 1156 | self.stackedWidget.setCurrentWidget(self.page_sc_score) 1157 | self.comboBox_sccid_score.clear() 1158 | try: 1159 | self.cursor.execute("select c_id from course;") 1160 | result = self.cursor.fetchall() 1161 | for col, key in enumerate(result): 1162 | self.comboBox_sccid_score.addItem(str(key[0])) 1163 | except pymysql.Error as e: 1164 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1165 | 1166 | def page_stu_transcript_show(self): 1167 | self.stackedWidget.setCurrentWidget(self.page_stu_transcript) 1168 | 1169 | def page_course_transcript_show(self): 1170 | self.stackedWidget.setCurrentWidget(self.page_course_transcript) 1171 | 1172 | def page_tt_show(self): 1173 | self.stackedWidget.setCurrentWidget(self.page_tt) 1174 | self.comboBox_ttcid.clear() 1175 | self.comboBox_ttcid.addItem("") 1176 | try: 1177 | self.cursor.execute("select c_id from course;") 1178 | result = self.cursor.fetchall() 1179 | for col, key in enumerate(result): 1180 | self.comboBox_ttcid.addItem(str(key[0])) 1181 | except pymysql.Error as e: 1182 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1183 | self.comboBox_tttid.clear() 1184 | self.comboBox_tttid.addItem("") 1185 | try: 1186 | self.cursor.execute("select t_id from teacher;") 1187 | result = self.cursor.fetchall() 1188 | for col, key in enumerate(result): 1189 | self.comboBox_tttid.addItem(str(key[0])) 1190 | except pymysql.Error as e: 1191 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1192 | 1193 | def page_ttr_show(self): 1194 | self.stackedWidget.setCurrentWidget(self.page_ttr) 1195 | self.comboBox_ttr_cidtid.clear() 1196 | self.comboBox_ttr_cidtid.addItem("") 1197 | try: 1198 | self.cursor.execute("select c_id, t_id from ttr;") 1199 | result = self.cursor.fetchall() 1200 | for col, key in enumerate(result): 1201 | self.comboBox_ttr_cidtid.addItem(str(key[0]) + "-" + str(key[1])) 1202 | except pymysql.Error as e: 1203 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1204 | self.comboBox_ttrrid.clear() 1205 | self.comboBox_ttrrid.addItem("") 1206 | try: 1207 | self.cursor.execute("select r_id, r_addr from classroom;") 1208 | result = self.cursor.fetchall() 1209 | for col, key in enumerate(result): 1210 | self.comboBox_ttrrid.addItem(str(key[0]) + "-" + str(key[1])) 1211 | except pymysql.Error as e: 1212 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1213 | 1214 | def student_where(self): 1215 | str_where = "" 1216 | have_other_text = False 1217 | # id 1218 | id_text = self.lineEdit_sid.text().strip() 1219 | if id_text != "": 1220 | str_where += "s_id like '" + id_text + "'" 1221 | have_other_text = True 1222 | # name 1223 | name_text = self.lineEdit_sname.text().strip() 1224 | if name_text != "": 1225 | if have_other_text: 1226 | str_where += " and " 1227 | str_where += "s_name like '" + name_text + "'" 1228 | have_other_text = True 1229 | # sex 1230 | sex_text = self.lineEdit_ssex.text().strip() 1231 | if sex_text != "": 1232 | if have_other_text: 1233 | str_where += " and " 1234 | str_where += "s_sex like '" + sex_text + "'" 1235 | have_other_text = True 1236 | # class 1237 | class_text = self.lineEdit_sclass.text().strip() 1238 | if class_text != "": 1239 | if have_other_text: 1240 | str_where += " and " 1241 | str_where += "s_class like '" + class_text + "'" 1242 | have_other_text = True 1243 | # tel 1244 | tel_text = self.lineEdit_stel.text().strip() 1245 | if tel_text != "": 1246 | if have_other_text: 1247 | str_where += " and " 1248 | str_where += "s_tel like '" + tel_text + "'" 1249 | have_other_text = True 1250 | # age 1251 | age_text = self.lineEdit_sage.text().strip() 1252 | if age_text != "": 1253 | try: 1254 | int(age_text) 1255 | if have_other_text: 1256 | str_where += " and " 1257 | str_where += "s_age = " + age_text 1258 | have_other_text = True 1259 | except: 1260 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1261 | 'Error age! Please input an INT number!').exec() 1262 | if have_other_text: 1263 | str_where = " where " + str_where 1264 | return str_where 1265 | 1266 | def teacher_where(self): 1267 | str_where = "" 1268 | have_other_text = False 1269 | # id 1270 | id_text = self.lineEdit_tid.text().strip() 1271 | if id_text != "": 1272 | str_where += "t_id like '" + id_text + "'" 1273 | have_other_text = True 1274 | # name 1275 | name_text = self.lineEdit_tname.text().strip() 1276 | if name_text != "": 1277 | if have_other_text: 1278 | str_where += " and " 1279 | str_where += "t_name like '" + name_text + "'" 1280 | have_other_text = True 1281 | # sex 1282 | sex_text = self.lineEdit_tsex.text().strip() 1283 | if sex_text != "": 1284 | if have_other_text: 1285 | str_where += " and " 1286 | str_where += "t_sex like '" + sex_text + "'" 1287 | have_other_text = True 1288 | # tel 1289 | tel_text = self.lineEdit_ttel.text().strip() 1290 | if tel_text != "": 1291 | if have_other_text: 1292 | str_where += " and " 1293 | str_where += "t_tel like '" + tel_text + "'" 1294 | have_other_text = True 1295 | # t_did 1296 | tdid_text = self.lineEdit_tdid.text().strip() 1297 | if tdid_text != "": 1298 | if have_other_text: 1299 | str_where += " and " 1300 | str_where += "d_id like '" + tdid_text + "'" 1301 | have_other_text = True 1302 | # age 1303 | age_text = self.lineEdit_tage.text().strip() 1304 | if age_text != "": 1305 | try: 1306 | agest = int(age_text) 1307 | if have_other_text: 1308 | str_where += " and " 1309 | str_where += "t_age = " + age_text 1310 | have_other_text = True 1311 | except: 1312 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1313 | 'Error age! Please input an INT number!').exec() 1314 | 1315 | if have_other_text: 1316 | str_where = " where " + str_where 1317 | return str_where 1318 | 1319 | def course_where(self): 1320 | str_where = "" 1321 | have_other_text = False 1322 | # id 1323 | id_text = self.lineEdit_cid.text().strip() 1324 | if id_text != "": 1325 | str_where += "c_id like '" + id_text + "'" 1326 | have_other_text = True 1327 | # name 1328 | name_text = self.lineEdit_cname.text().strip() 1329 | if name_text != "": 1330 | if have_other_text: 1331 | str_where += " and " 1332 | str_where += "c_name like '" + name_text + "'" 1333 | have_other_text = True 1334 | # credit 1335 | credit_text = self.lineEdit_credit.text().strip() 1336 | if credit_text != "": 1337 | try: 1338 | float(credit_text) 1339 | if have_other_text: 1340 | str_where += " and " 1341 | str_where += "credit = " + credit_text 1342 | have_other_text = True 1343 | except: 1344 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1345 | 'Error credit! Please input a FLOAT number!').exec() 1346 | # hours 1347 | hours_text = self.lineEdit_hours.text().strip() 1348 | if hours_text != "": 1349 | try: 1350 | int(hours_text) 1351 | if have_other_text: 1352 | str_where += " and " 1353 | str_where += "hours = " + hours_text 1354 | have_other_text = True 1355 | except: 1356 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1357 | 'Error hourse! Please input an INT number!').exec() 1358 | # c_did 1359 | cdid_text = self.lineEdit_cdid.text().strip() 1360 | if cdid_text != "": 1361 | if have_other_text: 1362 | str_where += " and " 1363 | str_where += "d_id like '" + cdid_text + "'" 1364 | have_other_text = True 1365 | 1366 | if have_other_text: 1367 | str_where = " where " + str_where 1368 | return str_where 1369 | 1370 | def class_where(self): 1371 | str_where = "" 1372 | have_other_text = False 1373 | # id 1374 | clid_text = self.lineEdit_clid.text().strip() 1375 | if clid_text != "": 1376 | str_where += "class.cl_id like '" + clid_text + "'" 1377 | have_other_text = True 1378 | # cl_did 1379 | cldid_text = self.lineEdit_cldid.text().strip() 1380 | if cldid_text != "": 1381 | if have_other_text: 1382 | str_where += " and " 1383 | str_where += "class.d_id like '" + cldid_text + "'" 1384 | have_other_text = True 1385 | # cl_tid 1386 | cltid_text = self.lineEdit_cltid.text().strip() 1387 | if cltid_text != "": 1388 | if have_other_text: 1389 | str_where += " and " 1390 | str_where += "class.t_id like '" + cltid_text + "'" 1391 | have_other_text = True 1392 | 1393 | if have_other_text: 1394 | str_where = " where " + str_where 1395 | return str_where 1396 | 1397 | def department_where(self): 1398 | str_where = "" 1399 | have_other_text = False 1400 | # id 1401 | did_text = self.lineEdit_did.text().strip() 1402 | if did_text != "": 1403 | str_where += "d_id like '" + did_text + "'" 1404 | have_other_text = True 1405 | # name 1406 | name_text = self.lineEdit_dname.text().strip() 1407 | if name_text != "": 1408 | if have_other_text: 1409 | str_where += " and " 1410 | str_where += "d_name like '" + name_text + "'" 1411 | have_other_text = True 1412 | 1413 | if have_other_text: 1414 | str_where = " where " + str_where 1415 | return str_where 1416 | 1417 | def classroom_where(self): 1418 | str_where = "" 1419 | have_other_text = False 1420 | # id 1421 | rid_text = self.lineEdit_rid.text().strip() 1422 | if rid_text != "": 1423 | str_where += "r_id like '" + rid_text + "'" 1424 | have_other_text = True 1425 | # addr 1426 | addr_text = self.lineEdit_raddr.text().strip() 1427 | if addr_text != "": 1428 | if have_other_text: 1429 | str_where += " and " 1430 | str_where += "r_addr like '" + addr_text + "'" 1431 | have_other_text = True 1432 | 1433 | if have_other_text: 1434 | str_where = " where " + str_where 1435 | return str_where 1436 | 1437 | def sc_where(self): 1438 | str_where = "" 1439 | have_other_text = False 1440 | # s_id 1441 | scsid_text = self.lineEdit_scsid.text().strip() 1442 | if scsid_text != "": 1443 | str_where += "sc.s_id like '" + scsid_text + "'" 1444 | have_other_text = True 1445 | # c_id 1446 | sccid = self.comboBox_sccid.currentText() 1447 | if sccid != "": 1448 | if have_other_text: 1449 | str_where += " and " 1450 | str_where += "sc.c_id like '" + sccid + "'" 1451 | have_other_text = True 1452 | 1453 | if have_other_text: 1454 | str_where = " where " + str_where 1455 | return str_where 1456 | 1457 | def student_transcript_where(self): 1458 | str_where = " where " 1459 | # s_id 1460 | stsid_text = self.lineEdit_stu_trans_sid.text().strip() 1461 | str_where += "sc.s_id = '" + stsid_text + "'" 1462 | # s_name 1463 | stsname_text = self.lineEdit_stu_trans_sname.text().strip() 1464 | str_where += " and student.s_name = '" + stsname_text + "'" + " and sc.score is " 1465 | str_where += "not null;" if self.radioButton_have_score.isChecked() else "null;" 1466 | return str_where 1467 | 1468 | def course_transcript_where(self): 1469 | str_where = " where " 1470 | # c_id 1471 | ctcid_text = self.lineEdit_course_trans_cid.text().strip() 1472 | str_where += "sc.c_id = '" + ctcid_text + "'" 1473 | # c_name 1474 | ctcname_text = self.lineEdit_course_trans_cname.text().strip() 1475 | if ctcname_text != "": 1476 | str_where += " and course.c_name = '" + ctcname_text + "'" 1477 | str_where += ";" 1478 | return str_where 1479 | 1480 | def tt_where(self): 1481 | str_where = "" 1482 | have_other_text = False 1483 | # c_id 1484 | ttcid_text = self.comboBox_ttcid.currentText() 1485 | if ttcid_text != "": 1486 | str_where += "tt.c_id = '" + ttcid_text + "'" 1487 | have_other_text = True 1488 | # t_id 1489 | tttid_text = self.comboBox_tttid.currentText() 1490 | if tttid_text != "": 1491 | if have_other_text: 1492 | str_where += " and " 1493 | str_where += "tt.t_id = '" + tttid_text + "'" 1494 | have_other_text = True 1495 | # start_week, end_week 1496 | tt_start_week = self.lineEdit_startweek.text().strip() 1497 | if tt_start_week != "": 1498 | try: 1499 | start_week = int(tt_start_week) 1500 | if start_week <= end_week: 1501 | if have_other_text: 1502 | str_where += " and " 1503 | str_where += "tt.start_week = " + tt_start_week 1504 | except: 1505 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'INPUT Wrong ', "请输入正确的开始星期!").exec() 1506 | tt_end_week = self.lineEdit_endweek.text().strip() 1507 | if tt_end_week != "": 1508 | try: 1509 | end_week = int(tt_end_week) 1510 | if start_week <= end_week: 1511 | if have_other_text: 1512 | str_where += " and " 1513 | str_where += "tt.end_week = " + tt_end_week 1514 | except: 1515 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'INPUT Wrong ', "请输入正确的终止星期!").exec() 1516 | 1517 | if have_other_text: 1518 | str_where = " where " + str_where 1519 | return str_where 1520 | 1521 | def ttr_where(self): 1522 | str_where = "" 1523 | have_other_text = False 1524 | # t_id, c_id pair 1525 | ttr_cidtid_text = self.comboBox_ttr_cidtid.currentText() 1526 | if ttr_cidtid_text != "": 1527 | cidtid = ttr_cidtid_text.split("-") 1528 | cid_text = cidtid[0] 1529 | tid_text = cidtid[1] 1530 | str_where += "ttr.c_id = '" + cid_text + "' and ttr.t_id = '" + tid_text + "'" 1531 | have_other_text = True 1532 | # r_id 1533 | ttr_rid_text = self.comboBox_ttrrid.currentText() 1534 | if ttr_rid_text != "": 1535 | if have_other_text: 1536 | str_where += " and " 1537 | r_id_text = ttr_rid_text.split("-") 1538 | str_where += "ttr.r_id = '" + r_id_text[0] + "'" 1539 | have_other_text = True 1540 | # dayno 1541 | ttr_dayno_text = self.comboBox_ttrdayno.currentIndex() 1542 | if ttr_dayno_text != 0: 1543 | if have_other_text: 1544 | str_where += " and " 1545 | str_where += "ttr.dayno = " + str(ttr_dayno_text) + "" 1546 | have_other_text = True 1547 | # classno 1548 | ttr_classno_text = self.comboBox_ttrclassno.currentIndex() 1549 | if ttr_classno_text != 0: 1550 | if have_other_text: 1551 | str_where += " and " 1552 | str_where += "ttr.classno = " + str(ttr_classno_text) + "" 1553 | have_other_text = True 1554 | 1555 | if have_other_text: 1556 | str_where = " where " + str_where 1557 | return str_where 1558 | 1559 | def query(self, sql, labels): 1560 | print(sql) 1561 | try: 1562 | self.cursor.execute(sql) 1563 | result = self.cursor.fetchall() 1564 | # tableView 1565 | self.model = QtGui.QStandardItemModel(0, len(labels)) 1566 | self.model.setHorizontalHeaderLabels(labels) 1567 | self.tableView.setModel(self.model) 1568 | # Create Table from tableData keys, values 1569 | for col, key in enumerate(result): 1570 | for row, item in enumerate(key): 1571 | self.model.setItem(col, row, QtGui.QStandardItem(str(key[row]))) 1572 | # stretch columns to fill empty space 1573 | for col in range(len(labels)): 1574 | self.tableView.horizontalHeader().setSectionResizeMode(col, QtWidgets.QHeaderView.Stretch) 1575 | except pymysql.Error as e: 1576 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1577 | 1578 | def delete(self, sql): 1579 | # make sure wanna delete 1580 | delete_confirm = QtWidgets.QMessageBox(QtWidgets.QMessageBox.Question, "Question", 1581 | "Are you sure you wanna delete?") 1582 | delete_confirm.addButton(QtWidgets.QMessageBox.Yes) 1583 | delete_confirm.addButton(QtWidgets.QMessageBox.No) 1584 | delete_confirm.setDefaultButton(QtWidgets.QMessageBox.No) 1585 | reply = delete_confirm.exec() 1586 | if reply == QtWidgets.QMessageBox.Yes: 1587 | try: 1588 | self.cursor.execute(sql) 1589 | self.db.commit() 1590 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Success', 1591 | 'Delete success! The left data as below.').exec() 1592 | except pymysql.Error as e: 1593 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'DELETE Wrong ' + str(e.args[0]), 1594 | str(e.args[1])).exec() 1595 | 1596 | def insert_student_sql(self): 1597 | insert_student_sql = "insert into student (s_id, s_name, s_sex, s_age, s_clid, s_tel) values (" 1598 | sid_text = self.lineEdit_sid.text().strip() 1599 | sname_text = self.lineEdit_sname.text().strip() 1600 | ssex_text = self.lineEdit_ssex.text().strip() 1601 | sclass_text = self.lineEdit_sclass.text().strip() 1602 | stel_text = self.lineEdit_stel.text().strip() 1603 | sage_text = "" 1604 | age_text = self.lineEdit_sage.text().strip() 1605 | if age_text != "": 1606 | try: 1607 | sage_text = int(age_text) 1608 | except: 1609 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1610 | 'Error age! Please input an INT number!').exec() 1611 | insert_value = "'" + sid_text + "', '" + sname_text + "', '" + ssex_text + "', '" + str( 1612 | sage_text) + "', '" + sclass_text + "', '" + stel_text + "'" 1613 | insert_value.replace("''", "null") 1614 | insert_student_sql += insert_value + ");" 1615 | return insert_student_sql 1616 | 1617 | def insert_teacher_sql(self): 1618 | insert_teacher_sql = "insert into teacher (t_id, t_name, t_sex, t_age, t_did, t_tel) values (" 1619 | tid_text = self.lineEdit_tid.text().strip() 1620 | tname_text = self.lineEdit_tname.text().strip() 1621 | tsex_text = self.lineEdit_tsex.text().strip() 1622 | ttel_text = self.lineEdit_ttel.text().strip() 1623 | tdid_text = self.lineEdit_tdid.text().strip() 1624 | tage_text = "" 1625 | age_text = self.lineEdit_tage.text().strip() 1626 | if age_text != "": 1627 | try: 1628 | tage_text = int(age_text) 1629 | except: 1630 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1631 | 'Error age! Please input an INT number!').exec() 1632 | insert_value = "'" + tid_text + "', '" + tname_text + "', '" + tsex_text + "', '" + str( 1633 | tage_text) + "', '" + tdid_text + "', '" + ttel_text + "'" 1634 | insert_value.replace("''", "null") 1635 | insert_teacher_sql += insert_value + ");" 1636 | return insert_teacher_sql 1637 | 1638 | def insert_course_sql(self): 1639 | insert_course_sql = "insert into course (c_id, c_name, d_id, credit, hours) values (" 1640 | cid_text = self.lineEdit_cid.text().strip() 1641 | cname_text = self.lineEdit_cname.text().strip() 1642 | cdid_text = self.lineEdit_cdid.text().strip() 1643 | credit_text = self.lineEdit_credit.text().strip() 1644 | ccredit_text = "" 1645 | if credit_text != "": 1646 | try: 1647 | ccredit_text = float(credit_text) 1648 | except: 1649 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1650 | 'Error age! Please input an FLOAT number!').exec() 1651 | hours_text = self.lineEdit_hours.text().strip() 1652 | chours_text = "" 1653 | if hours_text != "": 1654 | try: 1655 | chours_text = int(hours_text) 1656 | except: 1657 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1658 | 'Error age! Please input an INT number!').exec() 1659 | insert_value = "'" + cid_text + "', '" + cname_text + "', '" + cdid_text + "', '" + str( 1660 | ccredit_text) + "', '" + str(chours_text) + "'" 1661 | insert_value.replace("''", "null") 1662 | insert_course_sql += insert_value + ");" 1663 | return insert_course_sql 1664 | 1665 | def insert_class_sql(self): 1666 | insert_class_sql = "insert into class (cl_id, t_id, d_id) values (" 1667 | clid_text = self.lineEdit_clid.text().strip() 1668 | cltid_text = self.lineEdit_cltid.text().strip() 1669 | cldid_text = self.lineEdit_cldid.text().strip() 1670 | insert_value = "'" + clid_text + "', '" + cltid_text + "', '" + cldid_text + "'" 1671 | insert_value.replace("''", "null") 1672 | insert_class_sql += insert_value + ");" 1673 | return insert_class_sql 1674 | 1675 | def insert_department_sql(self): 1676 | insert_department_sql = "insert into department (d_id, d_name) values (" 1677 | did_text = self.lineEdit_did.text().strip() 1678 | dname_text = self.lineEdit_dname.text().strip() 1679 | insert_value = "'" + did_text + "', '" + dname_text + "'" 1680 | insert_value.replace("''", "null") 1681 | insert_department_sql += insert_value + ");" 1682 | return insert_department_sql 1683 | 1684 | def insert_classroom_sql(self): 1685 | insert_classroom_sql = "insert into classroom (r_id, r_addr) values (" 1686 | rid_text = self.lineEdit_rid.text().strip() 1687 | raddr_text = self.lineEdit_raddr.text().strip() 1688 | insert_value = "'" + rid_text + "', '" + raddr_text + "'" 1689 | insert_value.replace("''", "null") 1690 | insert_classroom_sql += insert_value + ");" 1691 | return insert_classroom_sql 1692 | 1693 | def insert_sc_sql(self): 1694 | insert_sc_sql = "insert into sc (s_id, c_id, score, date) values (" 1695 | sid_text = self.lineEdit_scsid.text().strip() 1696 | cid_text = self.comboBox_sccid.currentText().strip() 1697 | insert_value = "'" + sid_text + "', '" + cid_text + "', null, null" 1698 | insert_value.replace("''", "null") 1699 | insert_sc_sql += insert_value + ");" 1700 | return insert_sc_sql 1701 | 1702 | def insert_tt_sql(self): 1703 | insert_tt_sql = "insert into tt (t_id, c_id, start_week, end_week) values (" 1704 | tid_text = self.comboBox_tttid.currentText() 1705 | cid_text = self.comboBox_ttcid.currentText() 1706 | start_week_text = self.lineEdit_startweek.text().strip() 1707 | end_week_text = self.lineEdit_endweek.text().strip() 1708 | insert_value = "'" + tid_text + "', '" + cid_text + "', '" + start_week_text + "', '" + end_week_text + "'" 1709 | insert_value.replace("''", "null") 1710 | insert_tt_sql += insert_value + ");" 1711 | return insert_tt_sql 1712 | 1713 | def insert_ttr_sql(self): 1714 | insert_ttr_sql = "insert into ttr (c_id, t_id, r_id, dayno, classno) values (" 1715 | cidtid_text = self.comboBox_ttr_cidtid.currentText() 1716 | cidtid = cidtid_text.split("-") 1717 | cid_text, tid_text = cidtid[0], cidtid[1] 1718 | rid_raddr_text = self.comboBox_ttrrid.currentText().split("-") 1719 | rid_text = rid_raddr_text[0] 1720 | dayno_text = self.comboBox_ttrdayno.currentIndex() 1721 | classno_text = self.comboBox_ttrclassno.currentIndex() 1722 | insert_value = "'" + cid_text + "', '" + tid_text + "', '" + rid_text + "', " + \ 1723 | str(dayno_text).replace("0", "null") + ", " + str(classno_text).replace("0", "null") 1724 | insert_value.replace("''", "null") 1725 | insert_ttr_sql += insert_value + ");" 1726 | return insert_ttr_sql 1727 | 1728 | def insert(self, sql): 1729 | try: 1730 | self.cursor.execute(sql) 1731 | self.db.commit() 1732 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Success', 'Insert Success!').exec() 1733 | except pymysql.Error as e: 1734 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'INSERT Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1735 | 1736 | def update_sc(self): 1737 | today = date.today() 1738 | # dd/mm/YY 1739 | update_date = str(today.strftime("%Y-%m-%d")) 1740 | update_sc_sql = "update sc set date = '" + update_date + "',score = " 1741 | score_text = self.lineEdit_scscore_score.text().strip() 1742 | if score_text != "": 1743 | try: 1744 | score_text = float(score_text) 1745 | except: 1746 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Warning', 1747 | 'Error age! Please input an FLOAT number!').exec() 1748 | update_sc_sql += str(score_text) + " where s_id = '" + \ 1749 | self.lineEdit_scsid_score.text().strip() + "' and c_id = '" + \ 1750 | self.comboBox_sccid_score.currentText().strip() + "';" 1751 | try: 1752 | self.cursor.execute(update_sc_sql) 1753 | self.db.commit() 1754 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'Success', 'Update Success!').exec() 1755 | except pymysql.Error as e: 1756 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'UPDATE Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1757 | 1758 | def student_statistics(self): 1759 | if self.radioButton_have_score.isChecked(): 1760 | stud_stat_sql = "select total_credits, avg_score from studstat where s_id = '" + \ 1761 | self.lineEdit_stu_trans_sid.text().strip() + "' and s_name = '" + \ 1762 | self.lineEdit_stu_trans_sname.text().strip() + "';" 1763 | try: 1764 | self.cursor.execute(stud_stat_sql) 1765 | result = self.cursor.fetchone() 1766 | # 弹窗显示统计结果 1767 | if result is not None: 1768 | total_credits = result[0] 1769 | avg_score = result[1] 1770 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '学生统计结果', \ 1771 | "该同学已出成绩的总学分有:" + str(total_credits) + \ 1772 | "分,平均学分绩有:" + str(avg_score)).exec() 1773 | else: 1774 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '学生统计结果', \ 1775 | "没有该同学/该同学没有一门课出成绩,无法统计").exec() 1776 | except pymysql.Error as e: 1777 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), 1778 | str(e.args[1])).exec() 1779 | else: 1780 | stud_stat_sql = "select credits_no_score, courseNum from studnoscorecourse where s_id = '" + \ 1781 | self.lineEdit_stu_trans_sid.text().strip() + "' and s_name = '" + \ 1782 | self.lineEdit_stu_trans_sname.text().strip() + "';" 1783 | try: 1784 | self.cursor.execute(stud_stat_sql) 1785 | result = self.cursor.fetchone() 1786 | # 弹窗显示统计结果 1787 | if result is not None: 1788 | total_credits = result[0] 1789 | courseNum = result[1] 1790 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '学生未出成绩课程统计', \ 1791 | "该同学未出成绩/未结课的课程总学分有:" + str(total_credits) + \ 1792 | "分,总共课程数:" + str(courseNum) + "门").exec() 1793 | else: 1794 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '学生统计结果', \ 1795 | "没有该同学/该同学没有一门课未出成绩,无法统计").exec() 1796 | except pymysql.Error as e: 1797 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), 1798 | str(e.args[1])).exec() 1799 | 1800 | def course_statistics(self): 1801 | course_stat_sql = "select max_score, min_score, avg_score from coursestat where c_id = '" + \ 1802 | self.lineEdit_course_trans_cid.text().strip() + "';" 1803 | try: 1804 | self.cursor.execute(course_stat_sql) 1805 | result = self.cursor.fetchone() 1806 | # 弹窗显示统计结果 1807 | if result is not None: 1808 | max_score = result[0] 1809 | min_score = result[1] 1810 | avg_score = result[2] 1811 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '课程统计结果', \ 1812 | "该课程最高分:" + str(max_score) + "分,最低分:" + str(min_score) + \ 1813 | "平均分:" + str(avg_score) + "分.").exec() 1814 | else: 1815 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, '课程统计结果', \ 1816 | "没有该课程/没人选该课程/该课程成绩均未出,无法统计").exec() 1817 | except pymysql.Error as e: 1818 | QtWidgets.QMessageBox(QtWidgets.QMessageBox.NoIcon, 'QUERY Wrong ' + str(e.args[0]), str(e.args[1])).exec() 1819 | 1820 | def confirm(self): 1821 | # stuent 1822 | if self.stackedWidget.currentWidget() == self.page_student: 1823 | student_header = ['学号', '班级', '姓名', '性别', '年龄', '电话'] 1824 | if self.comboBox_student.currentIndex() == 0: 1825 | student_query_sql = "select * from student" + self.student_where() + ";" 1826 | self.query(student_query_sql, student_header) 1827 | elif self.comboBox_student.currentIndex() == 1: 1828 | self.insert(self.insert_student_sql()) 1829 | self.query("select * from student;", student_header) 1830 | elif self.comboBox_student.currentIndex() == 2: 1831 | student_delete_sql = "delete from student" + self.student_where() + ";" 1832 | self.delete(student_delete_sql) 1833 | self.query("select * from student;", student_header) 1834 | # teacher 1835 | elif self.stackedWidget.currentWidget() == self.page_teacher: 1836 | teacher_header = ['教师编号', '系号', '姓名', '性别', '年龄', '电话'] 1837 | if self.comboBox_teacher.currentIndex() == 0: 1838 | teacher_query_sql = "select * from teacher" + self.teacher_where() + ";" 1839 | self.query(teacher_query_sql, teacher_header) 1840 | elif self.comboBox_teacher.currentIndex() == 1: 1841 | self.insert(self.insert_teacher_sql()) 1842 | self.query("select * from teacher;", teacher_header) 1843 | elif self.comboBox_teacher.currentIndex() == 2: 1844 | teacher_delete_sql = "delete from teacher" + self.teacher_where() + ";" 1845 | self.delete(teacher_delete_sql) 1846 | self.query("select * from teacher;", teacher_header) 1847 | # course 1848 | elif self.stackedWidget.currentWidget() == self.page_course: 1849 | course_header = ['课程编号', '课程名', '开课系号', '学分', '学时'] 1850 | if self.comboBox_course.currentIndex() == 0: 1851 | course_query_sql = "select * from course" + self.course_where() + ";" 1852 | self.query(course_query_sql, course_header) 1853 | elif self.comboBox_course.currentIndex() == 1: 1854 | self.insert(self.insert_course_sql()) 1855 | self.query("select * from course;", course_header) 1856 | elif self.comboBox_course.currentIndex() == 2: 1857 | course_delete_sql = "delete from course" + self.course_where() + ";" 1858 | self.delete(course_delete_sql) 1859 | self.query("select * from course;", course_header) 1860 | # class 1861 | elif self.stackedWidget.currentWidget() == self.page_class: 1862 | class_header = ['班号', '班主任编号', '班主任名字', '班级院系', '班级学生数'] 1863 | class_query_A = "select A.cl_id, A.t_id, A.t_name, A.d_name, ifnull(stuno, 0) from (" + \ 1864 | "select class.cl_id, class.t_id, teacher.t_name, department.d_name " + \ 1865 | "from class inner join teacher inner join department " + \ 1866 | "on teacher.t_id = class.t_id and department.d_id = class.d_id " 1867 | class_query_B = ") as A left join (select cl_id, count(*) as stuno from student group by cl_id) as B " + \ 1868 | "on B.cl_id = A.cl_id;" 1869 | if self.comboBox_class.currentIndex() == 0: 1870 | # class_query_sql = "select * from class" + self.class_where() + ";" 1871 | self.query(class_query_A + self.class_where() + class_query_B, class_header) 1872 | elif self.comboBox_class.currentIndex() == 1: 1873 | self.insert(self.insert_class_sql()) 1874 | self.query(class_query_A + class_query_B, class_header) 1875 | elif self.comboBox_class.currentIndex() == 2: 1876 | class_delete_sql = "delete from class" + self.class_where() + ";" 1877 | self.delete(class_delete_sql) 1878 | self.query(class_query_A + class_query_B, class_header) 1879 | # department 1880 | elif self.stackedWidget.currentWidget() == self.page_department: 1881 | department_header = ['系号', '院系名称'] 1882 | if self.comboBox_department.currentIndex() == 0: 1883 | department_query_sql = "select * from department" + self.department_where() + ";" 1884 | self.query(department_query_sql, department_header) 1885 | elif self.comboBox_department.currentIndex() == 1: 1886 | self.insert(self.insert_department_sql()) 1887 | self.query("select * from department;", department_header) 1888 | elif self.comboBox_department.currentIndex() == 2: 1889 | department_delete_sql = "delete from department" + self.department_where() + ";" 1890 | self.delete(department_delete_sql) 1891 | self.query("select * from department;", department_header) 1892 | # classroom 1893 | elif self.stackedWidget.currentWidget() == self.page_classroom: 1894 | classroom_header = ['教室编号', '教室具体位置'] 1895 | if self.comboBox_classroom.currentIndex() == 0: 1896 | classroom_query_sql = "select * from classroom" + self.classroom_where() + ";" 1897 | self.query(classroom_query_sql, classroom_header) 1898 | elif self.comboBox_classroom.currentIndex() == 1: 1899 | self.insert(self.insert_classroom_sql()) 1900 | self.query("select * from classroom;", classroom_header) 1901 | elif self.comboBox_classroom.currentIndex() == 2: 1902 | classroom_delete_sql = "delete from classroom" + self.classroom_where() + ";" 1903 | self.delete(classroom_delete_sql) 1904 | self.query("select * from classroom;", classroom_header) 1905 | # sc 1906 | elif self.stackedWidget.currentWidget() == self.page_sc: 1907 | sc_header = ['课程编号', '课程名', '学生学号', '学生姓名', '成绩'] 1908 | sc_query_sql_A = "select sc.c_id, course.c_name, sc.s_id, student.s_name, sc.score " + \ 1909 | "from sc inner join student inner join course " + \ 1910 | "on student.s_id = sc.s_id and course.c_id = sc.c_id " 1911 | sc_where = self.sc_where() + ";" if self.sc_where() else ";" 1912 | if self.comboBox_sc.currentIndex() == 0: 1913 | self.query(sc_query_sql_A + sc_where, sc_header) 1914 | elif self.comboBox_sc.currentIndex() == 1: 1915 | self.insert(self.insert_sc_sql()) 1916 | self.query(sc_query_sql_A + ";", sc_header) 1917 | elif self.comboBox_sc.currentIndex() == 2: 1918 | sc_delete_sql = "delete from sc" + self.sc_where() + ";" 1919 | self.delete(sc_delete_sql) 1920 | self.query(sc_query_sql_A + ";", sc_header) 1921 | # sc_score 1922 | elif self.stackedWidget.currentWidget() == self.page_sc_score: 1923 | sc_score_query_sql = "select sc.c_id, course.c_name, sc.s_id, student.s_name, sc.score " + \ 1924 | "from sc inner join student inner join course " + \ 1925 | "on student.s_id = sc.s_id and course.c_id = sc.c_id;" 1926 | self.update_sc() 1927 | self.query(sc_score_query_sql, sc_header) 1928 | # student_transcript 1929 | elif self.stackedWidget.currentWidget() == self.page_stu_transcript: 1930 | student_transcript_header = ['学号', '姓名', '课程编号', '课程名', '成绩', '课程学分'] 1931 | student_transcript_query_sql = \ 1932 | "select student.s_id, student.s_name, sc.c_id, c_name, score, credit " + \ 1933 | "from sc inner join student inner join course " + \ 1934 | "on sc.s_id = student.s_id and sc.c_id = course.c_id " + \ 1935 | self.student_transcript_where() 1936 | self.query(student_transcript_query_sql, student_transcript_header) 1937 | # student_statistics 1938 | self.student_statistics() 1939 | # course_transcript 1940 | elif self.stackedWidget.currentWidget() == self.page_course_transcript: 1941 | course_transcript_header = ['课程编号', '课程名', '学号', '姓名', '成绩'] 1942 | course_transcript_query_sql = \ 1943 | "select sc.c_id, c_name, student.s_id, student.s_name, score " + \ 1944 | "from sc inner join student inner join course " + \ 1945 | "on sc.s_id = student.s_id and sc.c_id = course.c_id " + \ 1946 | self.course_transcript_where() 1947 | self.query(course_transcript_query_sql, course_transcript_header) 1948 | # course_statistics 1949 | self.course_statistics() 1950 | # tt 1951 | elif self.stackedWidget.currentWidget() == self.page_tt: 1952 | tt_header = ['教师编号', '教师姓名', '课程编号', '课程名', '开始星期', '结束星期'] 1953 | tt_query_sql_A = "select A.t_id, teacher.t_name, A.c_id, course.c_name, A.start_week, A.end_week " + \ 1954 | "from (select t_id, c_id, start_week, end_week from tt " 1955 | tt_query_sql_B = ") as A inner join teacher inner join course " + \ 1956 | "on A.t_id = teacher.t_id and A.c_id = course.c_id;" 1957 | tt_where = self.tt_where() 1958 | if self.comboBox_tt.currentIndex() == 0: 1959 | self.query(tt_query_sql_A + tt_where + tt_query_sql_B, tt_header) 1960 | elif self.comboBox_tt.currentIndex() == 1: 1961 | self.insert(self.insert_tt_sql()) 1962 | self.query(tt_query_sql_A + tt_query_sql_B, tt_header) 1963 | elif self.comboBox_tt.currentIndex() == 2: 1964 | tt_delete_sql = "delete from tt" + self.tt_where() + ";" 1965 | self.delete(tt_delete_sql) 1966 | self.query(tt_query_sql_A + tt_query_sql_B, tt_header) 1967 | # ttr 1968 | elif self.stackedWidget.currentWidget() == self.page_ttr: 1969 | ttr_header = ['教师编号', '教师姓名', '课程编号', '课程名', '星期', '节次', '教室'] 1970 | ttr_query_sql_A = "select A.t_id, teacher.t_name, A.c_id, course.c_name, A.dayno, A.classno, classroom.r_addr " + \ 1971 | "from (select t_id, c_id, r_id, dayno, classno from ttr " 1972 | ttr_query_sql_B = ") as A inner join teacher inner join course inner join classroom " + \ 1973 | "on A.t_id = teacher.t_id and A.c_id = course.c_id and A.r_id = classroom.r_id;" 1974 | ttr_where = self.ttr_where() 1975 | if self.comboBox_ttr.currentIndex() == 0: 1976 | self.query(ttr_query_sql_A + ttr_where + ttr_query_sql_B, ttr_header) 1977 | elif self.comboBox_ttr.currentIndex() == 1: 1978 | self.insert(self.insert_ttr_sql()) 1979 | self.query(ttr_query_sql_A + ttr_query_sql_B, ttr_header) 1980 | elif self.comboBox_ttr.currentIndex() == 2: 1981 | ttr_delete_sql = "delete from ttr" + self.ttr_where() + ";" 1982 | self.delete(ttr_delete_sql) 1983 | self.query(ttr_query_sql_A + ttr_query_sql_B, ttr_header) 1984 | 1985 | def clear(self): 1986 | self.tableView.setModel(None) 1987 | if self.stackedWidget.currentWidget() == self.page_student: 1988 | self.lineEdit_sid.clear() 1989 | self.lineEdit_sage.clear() 1990 | self.lineEdit_sname.clear() 1991 | self.lineEdit_ssex.clear() 1992 | self.lineEdit_stel.clear() 1993 | self.lineEdit_sclass.clear() 1994 | elif self.stackedWidget.currentWidget() == self.page_teacher: 1995 | self.lineEdit_tid.clear() 1996 | self.lineEdit_tage.clear() 1997 | self.lineEdit_tname.clear() 1998 | self.lineEdit_ttel.clear() 1999 | self.lineEdit_tsex.clear() 2000 | self.lineEdit_tdid.clear() 2001 | elif self.stackedWidget.currentWidget() == self.page_course: 2002 | self.lineEdit_cid.clear() 2003 | self.lineEdit_cname.clear() 2004 | self.lineEdit_cdid.clear() 2005 | self.lineEdit_hours.clear() 2006 | self.lineEdit_credit.clear() 2007 | elif self.stackedWidget.currentWidget() == self.page_class: 2008 | self.lineEdit_clid.clear() 2009 | self.lineEdit_cltid.clear() 2010 | self.lineEdit_cldid.clear() 2011 | elif self.stackedWidget.currentWidget() == self.page_department: 2012 | self.lineEdit_did.clear() 2013 | self.lineEdit_dname.clear() 2014 | elif self.stackedWidget.currentWidget() == self.page_classroom: 2015 | self.lineEdit_rid.clear() 2016 | self.lineEdit_raddr.clear() 2017 | elif self.stackedWidget.currentWidget() == self.page_sc: 2018 | self.lineEdit_scsid.clear() 2019 | self.comboBox_sccid.setCurrentIndex(0) 2020 | elif self.stackedWidget.currentWidget() == self.page_sc_score: 2021 | self.lineEdit_scsid_score.clear() 2022 | self.lineEdit_scscore_score.clear() 2023 | self.comboBox_sccid_score.setCurrentIndex(0) 2024 | elif self.stackedWidget.currentWidget() == self.page_course_transcript: 2025 | self.lineEdit_course_trans_cid.clear() 2026 | self.lineEdit_course_trans_cname.clear() 2027 | elif self.stackedWidget.currentWidget() == self.page_stu_transcript: 2028 | self.lineEdit_stu_trans_sid.clear() 2029 | self.lineEdit_stu_trans_sname.clear() 2030 | self.radioButton_have_score.setChecked(False) 2031 | elif self.stackedWidget.currentWidget() == self.page_tt: 2032 | self.comboBox_ttcid.setCurrentIndex(0) 2033 | self.comboBox_tttid.setCurrentIndex(0) 2034 | self.lineEdit_startweek.clear() 2035 | self.lineEdit_endweek.clear() 2036 | elif self.stackedWidget.currentWidget() == self.page_ttr: 2037 | self.comboBox_ttr_cidtid.setCurrentIndex(0) 2038 | self.comboBox_ttrclassno.setCurrentIndex(0) 2039 | self.comboBox_ttrdayno.setCurrentIndex(0) 2040 | self.comboBox_ttrrid.setCurrentIndex(0) 2041 | -------------------------------------------------------------------------------- /Lab/Lab3/lab3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab3/lab3.pdf -------------------------------------------------------------------------------- /Lab/Lab4/87-1190200208-李旻翀-实验4-executor.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Zhaonian Zou , 3 | * School of Computer Science and Technology, 4 | * Harbin Institute of Technology, China 5 | */ 6 | 7 | #include "executor.h" 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | #include 15 | #include 16 | 17 | #include "file_iterator.h" 18 | #include "page_iterator.h" 19 | #include "storage.h" 20 | 21 | using namespace std; 22 | 23 | namespace badgerdb 24 | { 25 | 26 | void TableScanner::print() const 27 | { 28 | badgerdb::File file = badgerdb::File::open(tableFile.filename()); 29 | for (badgerdb::FileIterator iter = file.begin(); iter != file.end(); ++iter) 30 | { 31 | badgerdb::Page page = *iter; 32 | badgerdb::Page *buffered_page; 33 | bufMgr->readPage(&file, page.page_number(), buffered_page); 34 | 35 | for (badgerdb::PageIterator page_iter = buffered_page->begin(); 36 | page_iter != buffered_page->end(); ++page_iter) 37 | { 38 | string key = *page_iter; 39 | string print_key = "("; 40 | int current_index = 0; 41 | for (int i = 0; i < tableSchema.getAttrCount(); ++i) 42 | { 43 | switch (tableSchema.getAttrType(i)) 44 | { 45 | case INT: 46 | { 47 | int true_value = 0; 48 | for (int j = 0; j < 4; ++j) 49 | { 50 | if (std::string(key, current_index + j, 1)[0] == '\0') 51 | { 52 | continue; // \0 is actually representing 0 53 | } 54 | true_value += 55 | (std::string(key, current_index + j, 1))[0] * pow(128, 3 - j); 56 | } 57 | print_key += to_string(true_value); 58 | current_index += 4; 59 | break; 60 | } 61 | case CHAR: 62 | { 63 | int max_len = tableSchema.getAttrMaxSize(i); 64 | print_key += std::string(key, current_index, max_len); 65 | current_index += max_len; 66 | current_index += 67 | (4 - (max_len % 4)) % 4; // align to the multiple of 4 68 | break; 69 | } 70 | case VARCHAR: 71 | { 72 | int actual_len = key[current_index]; 73 | current_index++; 74 | print_key += std::string(key, current_index, actual_len); 75 | current_index += actual_len; 76 | current_index += 77 | (4 - ((actual_len + 1) % 4)) % 4; // align to the multiple of 4 78 | break; 79 | } 80 | } 81 | print_key += ","; 82 | } 83 | print_key[print_key.size() - 1] = ')'; // change the last ',' to ')' 84 | cout << print_key << endl; 85 | } 86 | bufMgr->unPinPage(&file, page.page_number(), false); 87 | } 88 | bufMgr->flushFile(&file); 89 | } 90 | 91 | JoinOperator::JoinOperator(File &leftTableFile, 92 | File &rightTableFile, 93 | const TableSchema &leftTableSchema, 94 | const TableSchema &rightTableSchema, 95 | const Catalog *catalog, 96 | BufMgr *bufMgr) 97 | : leftTableFile(leftTableFile), 98 | rightTableFile(rightTableFile), 99 | leftTableSchema(leftTableSchema), 100 | rightTableSchema(rightTableSchema), 101 | resultTableSchema( 102 | createResultTableSchema(leftTableSchema, rightTableSchema)), 103 | catalog(catalog), 104 | bufMgr(bufMgr), 105 | isComplete(false) 106 | { 107 | // nothing 108 | } 109 | 110 | TableSchema JoinOperator::createResultTableSchema( 111 | const TableSchema &leftTableSchema, 112 | const TableSchema &rightTableSchema) 113 | { 114 | vector attrs; 115 | 116 | // first add all the left table attrs to the result table 117 | for (int k = 0; k < leftTableSchema.getAttrCount(); ++k) 118 | { 119 | Attribute new_attr = Attribute( 120 | leftTableSchema.getAttrName(k), leftTableSchema.getAttrType(k), 121 | leftTableSchema.getAttrMaxSize(k), leftTableSchema.isAttrNotNull(k), 122 | leftTableSchema.isAttrUnique(k)); 123 | attrs.push_back(new_attr); 124 | } 125 | 126 | // test every right table attrs, if it doesn't have the same attr(name and 127 | // type) in the left table, then add it to the result table 128 | for (int i = 0; i < rightTableSchema.getAttrCount(); ++i) 129 | { 130 | bool has_same = false; 131 | for (int j = 0; j < leftTableSchema.getAttrCount(); ++j) 132 | { 133 | if ((leftTableSchema.getAttrType(j) == rightTableSchema.getAttrType(i)) && 134 | (leftTableSchema.getAttrName(j) == rightTableSchema.getAttrName(i))) 135 | { 136 | has_same = true; 137 | } 138 | } 139 | if (!has_same) 140 | { 141 | Attribute new_attr = Attribute( 142 | rightTableSchema.getAttrName(i), rightTableSchema.getAttrType(i), 143 | rightTableSchema.getAttrMaxSize(i), rightTableSchema.isAttrNotNull(i), 144 | rightTableSchema.isAttrUnique(i)); 145 | attrs.push_back(new_attr); 146 | } 147 | } 148 | return TableSchema("TEMP_TABLE", attrs, true); 149 | } 150 | 151 | void JoinOperator::printRunningStats() const 152 | { 153 | cout << "# Result Tuples: " << numResultTuples << endl; 154 | cout << "# Used Buffer Pages: " << numUsedBufPages << endl; 155 | cout << "# I/Os: " << numIOs << endl; 156 | } 157 | 158 | vector JoinOperator::getCommonAttributes( 159 | const TableSchema &leftTableSchema, 160 | const TableSchema &rightTableSchema) const 161 | { 162 | vector common_attrs; 163 | for (int i = 0; i < rightTableSchema.getAttrCount(); ++i) 164 | { 165 | for (int j = 0; j < leftTableSchema.getAttrCount(); ++j) 166 | { 167 | if ((leftTableSchema.getAttrType(j) == rightTableSchema.getAttrType(i)) && 168 | (leftTableSchema.getAttrName(j) == rightTableSchema.getAttrName(i))) 169 | { 170 | Attribute new_attr = Attribute(rightTableSchema.getAttrName(i), 171 | rightTableSchema.getAttrType(i), 172 | rightTableSchema.getAttrMaxSize(i), 173 | rightTableSchema.isAttrNotNull(i), 174 | rightTableSchema.isAttrUnique(i)); 175 | common_attrs.push_back(new_attr); 176 | } 177 | } 178 | } 179 | return common_attrs; 180 | } 181 | 182 | /** 183 | * use the original key to generate the search key 184 | * @param key 185 | * @param common_attrs 186 | * @param TableSchema 187 | * @return 188 | */ 189 | string construct_search_key(string key, 190 | vector &common_attrs, 191 | const TableSchema &TableSchema) 192 | { 193 | string search_key; 194 | int current_index = 0; 195 | int current_attr_index = 0; 196 | for (int i = 0; i < TableSchema.getAttrCount(); ++i) 197 | { 198 | switch (TableSchema.getAttrType(i)) 199 | { 200 | case INT: 201 | { 202 | if (TableSchema.getAttrName(i) == 203 | common_attrs[current_attr_index].attrName && 204 | TableSchema.getAttrType(i) == 205 | common_attrs[current_attr_index].attrType) 206 | { 207 | search_key += std::string(key, current_index, 4); 208 | current_attr_index++; 209 | } 210 | current_index += 4; 211 | break; 212 | } 213 | case CHAR: 214 | { 215 | int max_len = TableSchema.getAttrMaxSize(i); 216 | if (TableSchema.getAttrName(i) == 217 | common_attrs[current_attr_index].attrName && 218 | TableSchema.getAttrType(i) == 219 | common_attrs[current_attr_index].attrType) 220 | { 221 | search_key += std::string(key, current_index, max_len); 222 | current_attr_index++; 223 | } 224 | current_index += max_len; 225 | current_index += (4 - (max_len % 4)) % 4; 226 | ; // align to the multiple of 4 227 | break; 228 | } 229 | case VARCHAR: 230 | { 231 | int actual_len = key[current_index]; 232 | current_index++; 233 | if (TableSchema.getAttrName(i) == 234 | common_attrs[current_attr_index].attrName && 235 | TableSchema.getAttrType(i) == 236 | common_attrs[current_attr_index].attrType) 237 | { 238 | search_key += std::string(key, current_index, actual_len); 239 | current_attr_index++; 240 | } 241 | current_index += actual_len; 242 | current_index += 243 | (4 - ((actual_len + 1) % 4)) % 4; // align to the multiple of 4 244 | break; 245 | } 246 | } 247 | if (current_attr_index >= common_attrs.size()) 248 | break; 249 | } 250 | return search_key; 251 | } 252 | 253 | string JoinOperator::joinTuples(string leftTuple, 254 | string rightTuple, 255 | const TableSchema &leftTableSchema, 256 | const TableSchema &rightTableSchema) const 257 | { 258 | int cur_right_index = 0; // current substring index in the right table key 259 | string result_tuple = leftTuple; 260 | 261 | for (int i = 0; i < rightTableSchema.getAttrCount(); ++i) 262 | { 263 | bool has_same = false; 264 | for (int j = 0; j < leftTableSchema.getAttrCount(); ++j) 265 | { 266 | if ((leftTableSchema.getAttrType(j) == rightTableSchema.getAttrType(i)) && 267 | (leftTableSchema.getAttrName(j) == rightTableSchema.getAttrName(i))) 268 | { 269 | has_same = true; 270 | } 271 | } 272 | // if the key is only owned by right table, add it to the result tuple 273 | switch (rightTableSchema.getAttrType(i)) 274 | { 275 | case INT: 276 | { 277 | if (!has_same) 278 | { 279 | result_tuple += std::string(rightTuple, cur_right_index, 4); 280 | } 281 | cur_right_index += 4; 282 | break; 283 | } 284 | case CHAR: 285 | { 286 | int max_len = rightTableSchema.getAttrMaxSize(i); 287 | if (!has_same) 288 | { 289 | result_tuple += std::string(rightTuple, cur_right_index, max_len); 290 | } 291 | cur_right_index += max_len; 292 | unsigned align_ = (4 - (max_len % 4)) % 4; // align to the multiple of 293 | // 4 294 | for (int k = 0; k < align_; ++k) 295 | { 296 | result_tuple += "0"; 297 | cur_right_index++; 298 | } 299 | break; 300 | } 301 | case VARCHAR: 302 | { 303 | int actual_len = rightTuple[cur_right_index]; 304 | result_tuple += std::string(rightTuple, cur_right_index, 1); 305 | cur_right_index++; 306 | if (!has_same) 307 | { 308 | result_tuple += std::string(rightTuple, cur_right_index, actual_len); 309 | } 310 | cur_right_index += actual_len; 311 | unsigned align_ = 312 | (4 - ((actual_len + 1) % 4)) % 4; // align to the multiple of 4 313 | for (int k = 0; k < align_; ++k) 314 | { 315 | result_tuple += "0"; 316 | cur_right_index++; 317 | } 318 | break; 319 | } 320 | } 321 | } 322 | return result_tuple; 323 | } 324 | 325 | bool OnePassJoinOperator::execute(int numAvailableBufPages, File &resultFile) 326 | { 327 | if (isComplete) 328 | return true; 329 | 330 | numResultTuples = 0; 331 | numUsedBufPages = 0; 332 | numIOs = 0; 333 | 334 | // TODO: Execute the join algorithm 335 | 336 | isComplete = true; 337 | return true; 338 | } 339 | 340 | bool NestedLoopJoinOperator::execute(int numAvailableBufPages, 341 | File &resultFile) 342 | { 343 | if (isComplete) 344 | return true; 345 | 346 | numResultTuples = 0; 347 | numUsedBufPages = 0; 348 | numIOs = 0; // 磁盘 IO 数 349 | 350 | // TODO: Execute the join algorithm 351 | 352 | vector result_list; // 保存结果 353 | vector common_attrs = getCommonAttributes(leftTableSchema, rightTableSchema); // 寻找两个表的公共部分 354 | badgerdb::FileIterator iter = leftTableFile.begin(); // 获取S关系的头指针 355 | while (iter != leftTableFile.end()) 356 | { 357 | // 将外关系S的M-1个块读入缓存池 358 | vector used_list; // 保存读入缓存的块 359 | for (int i = 0; i < numAvailableBufPages - 1; i++) 360 | { 361 | badgerdb::Page *buffered_page; 362 | badgerdb::Page page = *iter; 363 | 364 | bufMgr->readPage(&leftTableFile, page.page_number(), buffered_page); 365 | used_list.push_back(buffered_page); 366 | 367 | numUsedBufPages++; // 更新使用的页面数 368 | numIOs++; // 更新IO数 369 | 370 | if (++iter == leftTableFile.end()) // 若S关系中的元组提前读完 371 | break; 372 | } 373 | 374 | // 每次读入并处理外关系R中的一个块P 375 | for (badgerdb::FileIterator iter = rightTableFile.begin(); iter != rightTableFile.end(); iter++) 376 | { 377 | badgerdb::Page page = *iter; 378 | badgerdb::Page *buffered_page; 379 | 380 | bufMgr->readPage(&rightTableFile, page.page_number(), buffered_page); 381 | 382 | numUsedBufPages++; 383 | numIOs++; 384 | 385 | for (badgerdb::PageIterator page_iter = buffered_page->begin(); 386 | page_iter != buffered_page->end(); ++page_iter) 387 | { 388 | string rightKey = *page_iter; 389 | string key_right_flag = construct_search_key(rightKey, common_attrs, rightTableSchema); 390 | // 查找能与r元组进行连接的元组s 391 | for (int i = 0; i < used_list.size(); i++) // 遍历缓存块 392 | { 393 | badgerdb::Page *buffered_page_left = used_list.at(i); 394 | for (badgerdb::PageIterator page_iter_left = buffered_page_left->begin(); // 从头开始关系S的遍历 395 | page_iter_left != buffered_page_left->end(); page_iter_left++) 396 | { 397 | string result_tuple; 398 | string leftKey = *page_iter_left; 399 | string key_left_flag = construct_search_key(leftKey, common_attrs, leftTableSchema); // 寻找含有共同部分的元组 400 | 401 | // 判断是否相等 402 | if (key_left_flag == key_right_flag) 403 | { 404 | result_tuple = joinTuples(leftKey, rightKey, leftTableSchema, rightTableSchema); 405 | result_list.push_back(result_tuple); 406 | } 407 | } 408 | } 409 | } 410 | } 411 | } 412 | 413 | // 将结果写入文件 414 | for (int i = 0; i < result_list.size(); i++) 415 | HeapFileManager::insertTuple(result_list.at(i), resultFile, bufMgr); 416 | 417 | numResultTuples = result_list.size(); // 更新 numResultTuples 418 | if (numUsedBufPages > numAvailableBufPages) 419 | numUsedBufPages = numAvailableBufPages; // 使用的缓存块数不能超过 numAvailableBufPages 420 | else 421 | numUsedBufPages = numUsedBufPages; 422 | 423 | isComplete = true; 424 | return true; 425 | } 426 | 427 | BucketId GraceHashJoinOperator::hash(const string &key) const 428 | { 429 | std::hash strHash; 430 | return strHash(key) % numBuckets; 431 | } 432 | 433 | bool GraceHashJoinOperator::execute(int numAvailableBufPages, 434 | File &resultFile) 435 | { 436 | if (isComplete) 437 | return true; 438 | 439 | numResultTuples = 0; 440 | numUsedBufPages = 0; 441 | numIOs = 0; 442 | 443 | // TODO: Execute the join algorithm 444 | 445 | isComplete = true; 446 | return true; 447 | } 448 | 449 | } // namespace badgerdb -------------------------------------------------------------------------------- /Lab/Lab4/87-1190200208-李旻翀-实验4.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab4/87-1190200208-李旻翀-实验4.docx -------------------------------------------------------------------------------- /Lab/Lab4/87-1190200208-李旻翀-实验4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab4/87-1190200208-李旻翀-实验4.pdf -------------------------------------------------------------------------------- /Lab/Lab4/lab4.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/Lab4/lab4.pdf -------------------------------------------------------------------------------- /Lab/数据库系统实验报告模板.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/Lab/数据库系统实验报告模板.docx -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # HIT-DBMS-2022Spring 2 | 3 | 哈工大2022春数据库系统(HIT-DBMS)资料(实验/作业/期末复习资料) 4 | -------------------------------------------------------------------------------- /homework/87-1190200208-李旻翀-作业1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/87-1190200208-李旻翀-作业1.pdf -------------------------------------------------------------------------------- /homework/87-1190200208-李旻翀-作业2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/87-1190200208-李旻翀-作业2.pdf -------------------------------------------------------------------------------- /homework/87-1190200208-李旻翀-作业3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/87-1190200208-李旻翀-作业3.pdf -------------------------------------------------------------------------------- /homework/assignment1-answers.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/assignment1-answers.pdf -------------------------------------------------------------------------------- /homework/assignment1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/assignment1.pdf -------------------------------------------------------------------------------- /homework/assignment2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/assignment2.pdf -------------------------------------------------------------------------------- /homework/assignment3.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/homework/assignment3.pdf -------------------------------------------------------------------------------- /《数据库系统》考试复习范围.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/《数据库系统》考试复习范围.pdf -------------------------------------------------------------------------------- /往年题/2020春《数据库系统》期末试题C-v1.2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LMC117/HIT-DBMS-2022Spring/1a0d06ecf1a294c25e1db1f19ebd7714503a9aa8/往年题/2020春《数据库系统》期末试题C-v1.2.pdf --------------------------------------------------------------------------------