用delete释放int ab = *new int;语句创建的空间
时间: 2023-12-23 22:05:28 浏览: 44
可以使用以下语句释放:
```
delete &ab;
```
需要注意的是,使用 `delete` 释放的空间必须是使用 `new` 申请的空间,并且在释放之前需要先将指向该空间的指针置为 `nullptr`,以避免出现悬空指针。此外,释放的空间需要与申请时的内存对齐方式一致,即申请时使用 `new` 的对齐方式应该与释放时使用 `delete` 的对齐方式相同。
相关问题
用C语言写通讯录管理系统的设计与实现 (1)通讯者信息包括:编号(char num[10])、姓名(char name[10])、性别(char sex[10])、电话(char phone[20])、公司名称(char address[50]) (2)除了总的模块要求外,还需a.统计通讯录中男女比例;b.显示出同一公司中的人的信息。总的模块要求: 第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块——Menu()的功能是:显示提示选单。 第三个模块——Quit()的功能是:退出选单。 第四个模块——Create()的功能是:创建新的数据记录。 第五个模块——Add()的功能是:增加新的数据记录,并返回选单。 第六个模块——Find()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 第七个模块——Alter()[的功能是:修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 第八个模块——Delete()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 第九个模块——List()的功能是:显示所有记录。
通讯录管理系统的设计与实现可以分成以下几个步骤:
1. 定义通讯录结构体
首先需要定义一个结构体来存储通讯录的信息,包括编号、姓名、性别、电话和公司名称等信息。可以定义如下结构体:
```
typedef struct AddressBook {
char num[10];
char name[10];
char sex[10];
char phone[20];
char address[50];
} AddressBook;
```
2. 编写主函数main()
主函数的功能是根据选单的选项调用各函数,并完成相应的功能。可以使用switch语句来实现:
```
int main() {
int option;
while(1) {
Menu();
printf("请选择您要进行的操作:");
scanf("%d", &option);
switch(option) {
case 1:
Create();
break;
case 2:
Add();
break;
case 3:
Find();
break;
case 4:
Alter();
break;
case 5:
Delete();
break;
case 6:
List();
break;
case 7:
Quit();
return 0;
default:
printf("请输入正确的选项!\n");
break;
}
}
return 0;
}
```
3. 编写菜单函数Menu()
菜单函数的功能是显示提示选单,可以使用printf语句来实现:
```
void Menu() {
printf("=====================\n");
printf(" 通讯录管理系统 \n");
printf("=====================\n");
printf("1. 创建新的数据记录\n");
printf("2. 增加新的数据记录\n");
printf("3. 按要求查询相关的信息\n");
printf("4. 修改某条记录的信息\n");
printf("5. 删除某条记录\n");
printf("6. 显示所有记录\n");
printf("7. 退出系统\n");
}
```
4. 编写退出函数Quit()
退出函数的功能是退出选单,可以使用exit()函数来实现:
```
void Quit() {
printf("感谢使用通讯录管理系统!\n");
exit(0);
}
```
5. 编写创建函数Create()
创建函数的功能是创建新的数据记录,可以使用fopen()函数打开文件,并使用fwrite()函数写入数据:
```
void Create() {
FILE *fp;
fp = fopen("addressbook.dat", "wb");
if(fp == NULL) {
printf("无法创建文件!\n");
return;
}
printf("创建成功!\n");
fclose(fp);
}
```
6. 编写增加函数Add()
增加函数的功能是增加新的数据记录,可以使用fopen()函数打开文件,并使用fwrite()函数写入数据:
```
void Add() {
FILE *fp;
AddressBook ab;
fp = fopen("addressbook.dat", "ab");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
printf("请输入通讯者信息:\n");
printf("编号:");
scanf("%s", ab.num);
printf("姓名:");
scanf("%s", ab.name);
printf("性别:");
scanf("%s", ab.sex);
printf("电话:");
scanf("%s", ab.phone);
printf("公司名称:");
scanf("%s", ab.address);
fwrite(&ab, sizeof(AddressBook), 1, fp);
printf("添加成功!\n");
fclose(fp);
}
```
7. 编写查询函数Find()
查询函数的功能是按要求查询相关的信息,可以使用fopen()函数打开文件,并使用fread()函数读取数据,使用strcmp()函数比较字符串:
```
void Find() {
FILE *fp;
AddressBook ab;
char name[10];
int flag = 0;
fp = fopen("addressbook.dat", "rb");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
printf("请输入要查询的姓名:");
scanf("%s", name);
while(fread(&ab, sizeof(AddressBook), 1, fp)) {
if(strcmp(ab.name, name) == 0) {
printf("编号:%s\n", ab.num);
printf("姓名:%s\n", ab.name);
printf("性别:%s\n", ab.sex);
printf("电话:%s\n", ab.phone);
printf("公司名称:%s\n", ab.address);
flag = 1;
break;
}
}
if(flag == 0) {
printf("文件中没有该信息!\n");
}
fclose(fp);
}
```
8. 编写修改函数Alter()
修改函数的功能是修改某条记录的信息,可以使用fopen()函数打开文件,并使用fread()函数读取数据,使用strcmp()函数比较字符串,使用fseek()函数定位文件指针,使用fwrite()函数写入数据:
```
void Alter() {
FILE *fp;
AddressBook ab;
char name[10];
int flag = 0;
long offset;
fp = fopen("addressbook.dat", "rb+");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
printf("请输入要修改的姓名:");
scanf("%s", name);
while(fread(&ab, sizeof(AddressBook), 1, fp)) {
if(strcmp(ab.name, name) == 0) {
printf("请输入新的通讯者信息:\n");
printf("编号:");
scanf("%s", ab.num);
printf("姓名:");
scanf("%s", ab.name);
printf("性别:");
scanf("%s", ab.sex);
printf("电话:");
scanf("%s", ab.phone);
printf("公司名称:");
scanf("%s", ab.address);
offset = ftell(fp) - sizeof(AddressBook);
fseek(fp, offset, SEEK_SET);
fwrite(&ab, sizeof(AddressBook), 1, fp);
printf("修改成功!\n");
flag = 1;
break;
}
}
if(flag == 0) {
printf("文件中没有该信息!\n");
}
fclose(fp);
}
```
9. 编写删除函数Delete()
删除函数的功能是删除某条记录,可以使用fopen()函数打开文件,并使用fread()函数读取数据,使用strcmp()函数比较字符串,使用fseek()函数定位文件指针,使用fwrite()函数写入数据:
```
void Delete() {
FILE *fp, *temp;
AddressBook ab;
char name[10];
int flag = 0;
fp = fopen("addressbook.dat", "rb");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
temp = fopen("temp.dat", "wb");
if(temp == NULL) {
printf("无法创建临时文件!\n");
return;
}
printf("请输入要删除的姓名:");
scanf("%s", name);
while(fread(&ab, sizeof(AddressBook), 1, fp)) {
if(strcmp(ab.name, name) == 0) {
printf("删除成功!\n");
flag = 1;
} else {
fwrite(&ab, sizeof(AddressBook), 1, temp);
}
}
if(flag == 0) {
printf("文件中没有该信息!\n");
}
fclose(fp);
fclose(temp);
remove("addressbook.dat");
rename("temp.dat", "addressbook.dat");
}
```
10. 编写显示函数List()
显示函数的功能是显示所有记录,可以使用fopen()函数打开文件,并使用fread()函数读取数据:
```
void List() {
FILE *fp;
AddressBook ab;
fp = fopen("addressbook.dat", "rb");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
printf("编号\t姓名\t性别\t电话\t\t\t公司名称\n");
while(fread(&ab, sizeof(AddressBook), 1, fp)) {
printf("%s\t%s\t%s\t%s\t%s\n", ab.num, ab.name, ab.sex, ab.phone, ab.address);
}
fclose(fp);
}
```
11. 统计男女比例
统计男女比例的方法是在显示函数List()中添加统计代码:
```
void List() {
FILE *fp;
AddressBook ab;
int male = 0, female = 0;
fp = fopen("addressbook.dat", "rb");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
printf("编号\t姓名\t性别\t电话\t\t\t公司名称\n");
while(fread(&ab, sizeof(AddressBook), 1, fp)) {
printf("%s\t%s\t%s\t%s\t%s\n", ab.num, ab.name, ab.sex, ab.phone, ab.address);
if(strcmp(ab.sex, "男") == 0) {
male++;
} else if(strcmp(ab.sex, "女") == 0) {
female++;
}
}
printf("男性:%d人,女性:%d人\n", male, female);
fclose(fp);
}
```
12. 显示同一公司中的人的信息
显示同一公司中的人的信息的方法是在查询函数Find()中添加统计代码:
```
void Find() {
FILE *fp;
AddressBook ab;
char address[50];
int flag = 0;
fp = fopen("addressbook.dat", "rb");
if(fp == NULL) {
printf("无法打开文件!\n");
return;
}
printf("请输入要查询的公司名称:");
scanf("%s", address);
while(fread(&ab, sizeof(AddressBook), 1, fp)) {
if(strcmp(ab.address, address) == 0) {
printf("编号:%s\n", ab.num);
printf("姓名:%s\n", ab.name);
printf("性别:%s\n", ab.sex);
printf("电话:%s\n", ab.phone);
printf("公司名称:%s\n", ab.address);
flag = 1;
}
}
if(flag == 0) {
printf("文件中没有该信息!\n");
}
fclose(fp);
}
```
至此,C语言写通讯录管理系统的设计与实现就完成了。
mysql 一个简单的图书管理系统包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息。此系统的功能分为面向学生和面向管理员两部分,其中,面向学生部分可以进行借阅、续借、归还和查询书籍等操作;面向管理员部分可以完成书籍和学生的增加、删除和修改以及对学生借阅、续借、归还的确认。要求完成该系统的数据库设计,用sql语句实现数据库的设计,并在mysql上调试通过。
### 回答1:
这是关于MySQL一个简单的图书管理系统,包括图书馆内书籍的信息、学校在校学生的信息以及学生的借阅信息等。此系统的功能分为面向学生和面向管理员两部分,其中,面向学生部分可以进行借阅、续借、归还和查阅书籍等操作;面向管理员部分可以完成书籍和学生的增加、删除和修改以及对学生借阅、续借、归还和查阅书籍等的操作。要求完成该系统的数据库设计,用SQL语句实现数据库的设计,并在MySQL上进行调试通过。
### 回答2:
图书管理系统数据库设计
该图书管理系统的数据库包括三个表,分别为book(书籍)、student(学生)和borrow(借阅记录)。其中,book表包括书籍的ISBN编号、书名、作者、出版社、出版日期和数量等信息;student表包括学生的学号、姓名、性别、班级和电话等信息;borrow表包括借阅记录的借阅编号、书籍的ISBN编号、学生的学号、借阅日期和归还日期等信息。
图书管理系统的sql语句实现
1. 创建book表
CREATE TABLE book (
ISBN CHAR(13) NOT NULL PRIMARY KEY,
title VARCHAR(100) NOT NULL,
author VARCHAR(50) NOT NULL,
press VARCHAR(50) NOT NULL,
pub_date DATE NOT NULL,
quantity INT NOT NULL
);
2. 创建student表
CREATE TABLE student (
student_id CHAR(8) NOT NULL PRIMARY KEY,
name VARCHAR(20) NOT NULL,
gender VARCHAR(4) NOT NULL,
class VARCHAR(20) NOT NULL,
phone VARCHAR(20) NOT NULL
);
3. 创建borrow表
CREATE TABLE borrow (
borrow_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
ISBN CHAR(13) NOT NULL,
student_id CHAR(8) NOT NULL,
borrow_date DATE NOT NULL,
return_date DATE,
FOREIGN KEY (ISBN) REFERENCES book(ISBN),
FOREIGN KEY (student_id) REFERENCES student(student_id)
);
4. 插入数据到book表
INSERT INTO book (ISBN, title, author, press, pub_date, quantity)
VALUES
('9787111601513', 'MySQL权威指南', 'Michael Widenius, David Axmark, MySQL AB', '机械工业出版社', '2003-08-01', 10),
('9780596008752', 'Head First Design Patterns', 'Eric Freeman, Elisabeth Robson, Bert Bates, Kathy Sierra', 'O''Reilly', '2004-11-04', 5),
('9787115443229', 'JavaScript高级程序设计', 'Nicholas C. Zakas', '人民邮电出版社', '2013-01-01', 8);
5. 插入数据到student表
INSERT INTO student (student_id, name, gender, class, phone)
VALUES
('20010001', '张三', '男', '计算机1班', '13800138001'),
('20010002', '李四', '女', '计算机1班', '13800138002'),
('20010003', '王五', '男', '计算机2班', '13800138003');
6. 插入数据到borrow表
INSERT INTO borrow (ISBN, student_id, borrow_date)
VALUES
('9787111601513', '20010001', '2020-10-01'),
('9787111601513', '20010002', '2020-10-03'),
('9780596008752', '20010003', '2020-10-05'),
('9780596008752', '20010001', '2020-10-07');
7. 查询书籍信息
SELECT ISBN, title, author, press, pub_date, quantity FROM book;
8. 查询学生信息
SELECT student_id, name, gender, class, phone FROM student;
9. 查询借阅记录
SELECT borrow_id, ISBN, student_id, borrow_date, return_date FROM borrow;
10. 借阅书籍
UPDATE book SET quantity = quantity - 1 WHERE ISBN = '9787111601513';
INSERT INTO borrow (ISBN, student_id, borrow_date) VALUES ('9787111601513', '20010003', '2020-10-10');
11. 续借书籍
UPDATE borrow SET return_date = DATE_ADD(return_date, INTERVAL 7 DAY) WHERE borrow_id = 1;
12. 归还书籍
UPDATE book SET quantity = quantity + 1 WHERE ISBN = '9787111601513';
UPDATE borrow SET return_date = '2020-10-20' WHERE borrow_id = 1;
13. 增加书籍
INSERT INTO book (ISBN, title, author, press, pub_date, quantity)
VALUES
('9787115443229', 'JavaScript高级程序设计', 'Nicholas C. Zakas', '人民邮电出版社', '2013-01-01', 10);
14. 增加学生
INSERT INTO student (student_id, name, gender, class, phone)
VALUES ('20010004', '赵六', '男', '计算机2班', '13800138004');
15. 删除书籍
DELETE FROM book WHERE ISBN = '9787115443229';
16. 删除学生
DELETE FROM student WHERE student_id = '20010004';
图书管理系统的mysql调试
要测试该系统是否可以正常运行,可以进行以下测试:
1. 查询书籍、学生和借阅记录是否正确插入并显示。
2. 借阅、续借和归还书籍功能是否正常。
3. 增加和删除书籍、学生是否正常。
4. 是否能够对借阅、续借、归还进行确认。
5. 系统是否能够处理同时有多名学生借阅同一本书的情况。
通过以上测试,可以验证该图书管理系统在mysql上调试通过。
### 回答3:
该图书管理系统应该包括以下七个表:书籍信息表、学生信息表、借阅信息表、管理员信息表、出版社信息表、作者信息表、种类信息表。
1. 书籍信息表(book_info)包括字段:书籍id、书名、出版社id、作者id、种类id、库存
2. 学生信息表(student_info)包括字段:学生id、学生姓名、性别、年级、专业、学院
3. 借阅信息表(borrow_info)包括字段:借阅记录id、学生id、书籍id、借阅日期、归还日期、是否归还
4. 管理员信息表(admin_info)包括字段:管理员id、管理员姓名、联系方式、密码
5. 出版社信息表(publish_info)包括字段:出版社id、出版社名称
6. 作者信息表(author_info)包括字段:作者id、作者姓名
7. 种类信息表(category_info)包括字段:种类id、种类名称
以上七个表中,借阅信息表是连向学生信息表和书籍信息表的一个关联表,出版社信息表、作者信息表、种类信息表三个表则是为书籍信息表服务的辅助表。每个表中的字段要根据具体需求进行设计,确保无重复字段。
下面是用sql语句实现数据库的设计:
-- 创建出版社信息表
CREATE TABLE `publish_info` (
`publish_id` int(11) NOT NULL AUTO_INCREMENT,
`publish_name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`publish_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建作者信息表
CREATE TABLE `author_info` (
`author_id` int(11) NOT NULL AUTO_INCREMENT,
`author_name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`author_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建种类信息表
CREATE TABLE `category_info` (
`category_id` int(11) NOT NULL AUTO_INCREMENT,
`category_name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建书籍信息表
CREATE TABLE `book_info` (
`book_id` int(11) NOT NULL AUTO_INCREMENT,
`book_name` varchar(100) NOT NULL DEFAULT '',
`publish_id` int(11) NOT NULL,
`author_id` int(11) NOT NULL,
`category_id` int(11) NOT NULL,
`inventory` int(11) NOT NULL,
PRIMARY KEY (`book_id`),
FOREIGN KEY (`publish_id`) REFERENCES `publish_info`(`publish_id`),
FOREIGN KEY (`author_id`) REFERENCES `author_info`(`author_id`),
FOREIGN KEY (`category_id`) REFERENCES `category_info`(`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建学生信息表
CREATE TABLE `student_info` (
`student_id` int(11) NOT NULL AUTO_INCREMENT,
`student_name` varchar(50) NOT NULL DEFAULT '',
`gender` varchar(4) NOT NULL DEFAULT '',
`grade` varchar(10) NOT NULL DEFAULT '',
`major` varchar(50) NOT NULL DEFAULT '',
`college` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建借阅信息表
CREATE TABLE `borrow_info` (
`borrow_id` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`book_id` int(11) NOT NULL,
`borrow_date` date NOT NULL,
`return_date` date DEFAULT NULL,
`is_return` tinyint(1) NOT NULL DEFAULT '0',
PRIMARY KEY (`borrow_id`),
FOREIGN KEY (`student_id`) REFERENCES `student_info`(`student_id`),
FOREIGN KEY (`book_id`) REFERENCES `book_info`(`book_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 创建管理员信息表
CREATE TABLE `admin_info` (
`admin_id` int(11) NOT NULL AUTO_INCREMENT,
`admin_name` varchar(50) NOT NULL DEFAULT '',
`contact` varchar(50) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`admin_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上六个表的设计就完成了。根据具体需求还可以添加一些其他的表和字段。在mysql上调试通过后,即可实现一个相对完善的图书管理系统。
阅读全文