1)针对实验一的student表,选择一门高级程序设计语言,编程实现学生信息的查询、添加、修改和删除功能。 (2)针对不同功能,要设计相应的用户界面。 (3)可以根据学生学号或姓名查询学生信息。
时间: 2024-05-28 08:13:50 浏览: 56
以下是一个基于Python语言和SQLite数据库的实现,实现了学生信息的查询、添加、修改和删除功能,并提供了简单的用户界面。具体实现细节如下:
1. 数据库表结构设计
我们使用SQLite数据库,设计了一个名为student的表,包含以下字段:
- id:学生学号,主键。
- name:学生姓名。
- age:学生年龄。
- gender:学生性别。
- major:学生专业。
以下是对应的SQL语句:
```sql
CREATE TABLE student (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER,
gender TEXT,
major TEXT
);
```
2. 查询功能实现
查询功能支持根据学号或姓名查询学生信息。查询结果以表格形式展示在终端上。以下是查询功能的实现代码:
```python
def query_student():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
while True:
print('请输入查询条件(学号或姓名),输入q退出查询:')
condition = input().strip()
if condition == 'q':
break
query_sql = f"SELECT * FROM student WHERE id='{condition}' OR name='{condition}'"
cursor.execute(query_sql)
results = cursor.fetchall()
if len(results) == 0:
print('没有找到符合条件的学生!')
else:
print(tabulate(results, headers=['学号', '姓名', '年龄', '性别', '专业'], tablefmt='orgtbl'))
cursor.close()
conn.close()
```
3. 添加功能实现
添加功能支持在终端上输入学生信息,完成后将信息保存到数据库中。以下是添加功能的实现代码:
```python
def add_student():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
while True:
print('请输入学生信息,输入q退出添加:')
id = input('学号:').strip()
if id == 'q':
break
name = input('姓名:').strip()
age = input('年龄:').strip()
gender = input('性别:').strip()
major = input('专业:').strip()
insert_sql = f"INSERT INTO student (id, name, age, gender, major) VALUES ('{id}', '{name}', '{age}', '{gender}', '{major}')"
cursor.execute(insert_sql)
conn.commit()
print('学生信息已添加!')
cursor.close()
conn.close()
```
4. 修改功能实现
修改功能支持根据学号或姓名查询学生信息,并在终端上修改学生信息。以下是修改功能的实现代码:
```python
def update_student():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
while True:
print('请输入查询条件(学号或姓名),输入q退出修改:')
condition = input().strip()
if condition == 'q':
break
query_sql = f"SELECT * FROM student WHERE id='{condition}' OR name='{condition}'"
cursor.execute(query_sql)
results = cursor.fetchall()
if len(results) == 0:
print('没有找到符合条件的学生!')
else:
print(tabulate(results, headers=['学号', '姓名', '年龄', '性别', '专业'], tablefmt='orgtbl'))
id = results[0][0]
name = results[0][1]
age = results[0][2]
gender = results[0][3]
major = results[0][4]
print(f'请输入修改后的学生信息,学号不可修改,输入q退出修改:')
name = input(f'姓名(当前值:{name}):').strip()
if name == 'q':
break
age = input(f'年龄(当前值:{age}):').strip()
gender = input(f'性别(当前值:{gender}):').strip()
major = input(f'专业(当前值:{major}):').strip()
update_sql = f"UPDATE student SET name='{name}', age='{age}', gender='{gender}', major='{major}' WHERE id='{id}'"
cursor.execute(update_sql)
conn.commit()
print('学生信息已修改!')
cursor.close()
conn.close()
```
5. 删除功能实现
删除功能支持根据学号或姓名查询学生信息,并在终端上确认是否删除。以下是删除功能的实现代码:
```python
def delete_student():
conn = sqlite3.connect(DB_FILE)
cursor = conn.cursor()
while True:
print('请输入查询条件(学号或姓名),输入q退出删除:')
condition = input().strip()
if condition == 'q':
break
query_sql = f"SELECT * FROM student WHERE id='{condition}' OR name='{condition}'"
cursor.execute(query_sql)
results = cursor.fetchall()
if len(results) == 0:
print('没有找到符合条件的学生!')
else:
print(tabulate(results, headers=['学号', '姓名', '年龄', '性别', '专业'], tablefmt='orgtbl'))
id = results[0][0]
name = results[0][1]
confirm = input(f'确认删除学生 {name}(学号:{id})吗?(输入y确认,输入其他字符取消)').strip()
if confirm == 'y':
delete_sql = f"DELETE FROM student WHERE id='{id}'"
cursor.execute(delete_sql)
conn.commit()
print('学生信息已删除!')
cursor.close()
conn.close()
```
6. 用户界面
我们使用Python的命令行界面库curses实现了一个简单的用户界面。以下是用户界面的实现代码:
```python
def main(stdscr):
while True:
stdscr.clear()
stdscr.addstr(0, 0, '1. 查询学生信息')
stdscr.addstr(1, 0, '2. 添加学生信息')
stdscr.addstr(2, 0, '3. 修改学生信息')
stdscr.addstr(3, 0, '4. 删除学生信息')
stdscr.addstr(5, 0, '请输入操作编号(1-4),输入q退出:')
stdscr.refresh()
key = stdscr.getkey()
if key == 'q':
break
if key == '1':
query_student()
elif key == '2':
add_student()
elif key == '3':
update_student()
elif key == '4':
delete_student()
curses.endwin()
if __name__ == '__main__':
curses.wrapper(main)
```
运行程序后,用户可以在终端上使用上下键选择操作,按回车键确认操作。以下是一个示例运行截图:
![image-20211012114244478](https://i.loli.net/2021/10/12/dHqgAb6XaLPZIw9.png)