您的位置:首页 > 编程语言

链表的基本操作与文件操作--期末大作业代码部分

2015-06-24 12:51 381 查看
包括:

链表的基本操作:增删改查 包括一个反向冒泡排序。

文件的导出与读取。

算是数据结构学习的第一课作业。#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define len sizeof(struct des)
struct des{
int num;
int price;
char name[22];
struct des *next;
};

int n; //节点个数
int menu(){ //菜单
int s;
char ch;
printf(" 欢迎进入甜点选择系统 o(≧ω≦)o \n");
printf(" o(* ̄▽ ̄*)ブ|| 1 || 增加甜点的信息\n");
printf(" || 2 || 查找已输入的甜点信息\n");
printf(" || 3 || 修改甜点信息\n");
printf(" || 4 || 删除甜点信息\n");
printf(" || 5 || 按编号从小到大输出甜品信息\n");
printf(" || 6 || 导出甜点信息\n");
printf(" || 7 || 退出甜点管理系统\n");
printf("-------------------------------------------------------------------------\n");
while (scanf("%d", &s) == EOF || s > 7 || s < 1){
while (ch = getchar() != '\n');
printf("输入错了QuQ请输入1~6以内的数字喵");
}
return s;
}
des *head;
FILE *file;
des *createNode() //创建链表
{
struct des *p;
p = (des*)malloc(len);
p->next = NULL;
return p;
}

void sort(){ //反向冒泡法排序
des *tail = NULL, *p, *q;
while (tail != head->next){
p = head;
q = p->next;
while (q->next != tail){
if (p->next->num > q->next->num){
p->next = q->next;
q->next = q->next->next;
p->next->next = q;
}
p = p->next;
q = q->next;
}
tail = q;
}
}

void del(){ //删除数据
sort();
int pos;
des *p = head, *l;
l = p->next;
int i=1;
printf("少年、告诉我要删除甜品的编号吧:");
scanf("%d", &pos);
while (l!= NULL){
if (l->num == pos){
p->next = p->next->next;
free(l);
break;
}
p = p->next;
l = p->next;
}
if (l == NULL){
printf("没有找到这个数据啊喵QAQ\n");
}
else
printf("(成功删除了这个甜品数据=w=\n");
}

void show(){ //按从低到高顺序打印数据
sort();
des *p;
p = head->next;
if (p == NULL)
printf("当前并没有数据\n");
else{
printf("=============================================================\n");
printf(" 编号 名称 价格 \n");
printf("-------------------------------------------------------------\n");
}
while (p != NULL){
printf(" %d\t||\t%s\t\t||\t%d\n", p->num, p->name, p->price);
p = p->next;
}
printf("=============================================================\n");
}

void destroy(des *cur)
{
if (cur->next != NULL)
destroy(cur->next);
if (cur != NULL)
free(cur);
}

void find(){ //查询甜品数据
des *p;
int pos, i=1;
printf("请输入要查询的数据编号");
scanf("%d", &pos);
p = head->next;
while (p){
if (p->num == pos)
break;
p = p->next;
}
if (p!=NULL){
printf("=============================================================\n");
printf(" 编号 名称 价格 \n");
printf("-------------------------------------------------------------\n");
printf(" %d\t||\t%s\t\t||\t%d\n", p->num, p->name, p->price);
printf("=============================================================\n");
}
else
printf("并没有找到这个甜品信息!\n");
}

void read()
{
if (!(file = fopen("D:\\biu.bin", "rb")))
{
printf("无法打开文件");
return;
}
else
printf("成功打开了该文件~");
des *n;
if (head->next != NULL)
{
destroy(head->next);
head->next = NULL;
}
while (true)
{
n = createNode();
if (!fread(n, sizeof(des), 1, file))
break;
n->next = head->next;
head->next = n;
}
fclose(file);
}

void write(des *p)
{
if (!(file = fopen("biu.bin", "wb")))
{
printf("文件写入失败QAQ");
return;
}
if (p == NULL)
{
fputs("", file);
fclose(file);
return;
}
while (true)
{
if (fwrite(p, sizeof(des), 1, file) != 1)
printf("文件写入失败QAQ");
if (p->next == NULL)
break;
p = p->next;
}
fclose(file);
}

void add(){ //输入数据
des *h;
char s;
printf("请输入甜品信息 \n");
do{
h = createNode();
printf("请输入甜品的编号: \n");
scanf("%d", &h->num);
printf("请输入甜品的名称: \n");
scanf("%s", &h->name);
printf("请输入甜品的价格: \n");
scanf("%d", &h->price);

h->next = head->next;
head->next = h;
getchar();
printf("是否还要接着输入(Y/N)");
scanf("%c", &s);

} while (s == 'Y' || s == 'y');

write(head->next);
}

void edit(){ //修改甜品数据
int i, pos;
des *p;
printf("请输入要修改的甜品数据的编号: ");
scanf("%d", &pos);
p = head;
while (p->next){
p = p->next;
if (p->num == pos)
break;
}
if (p->next == NULL)
printf("找不到这个数据,请验证一下!\n");
else{
printf("请输入甜品的新名字: ");
scanf("%s", &p->name);
printf("请输入甜品的新价格: ");
scanf("%d", &p->price);
printf("甜品信息编辑成功!\n ");
}
}

void fprintf(){
des *a = head->next;
if (head->next == NULL){
printf("当前没有收支数据");
}
if (!(file = fopen("tp.txt", "w")))
{
printf("无法打开该文件");
return;
}
des *p = head->next;
fprintf(file,"=============================================================\n");
fprintf(file," 编号 名称 价格 \n");
fprintf(file,"-------------------------------------------------------------\n");
while (1){
fprintf(file," %d\t||\t%s\t\t||\t%d\n", p->num, p->name, p->price);
if (p->next == NULL)
break;
p = p->next;
}
fprintf(file, "============================================================\n");
fclose(file);
printf("收支数据已输出到tp.txt,请查看喵~<( ̄︶ ̄)>\n");
system("notepad tp.txt");

}
int main(){
system("COLOR 47");
head = createNode();
head->next = NULL;
int c;
printf("★ 导入文件请输入 1\n");
printf("★ 手动输入请输入 2\n");
printf("如需输入文件,请将二进制文件放置在D盘根目录下,并命名为biu.bin\n");
scanf("%d", &c);
if (c == 1)
read();
while (1){
system("pause");
system("CLS");
switch (menu()){
case 1:add(); break;
case 2:find(); break;
case 3:edit(); break;
case 4:del(); break;
case 5:show(); break;
case 6:fprintf(); break;
case 7:destroy(head); exit(0);
system("pause");

}
}
}
VS编译通过。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: