用文件操作来写简单管理系统
什么是文件操作
文件就是磁盘中的文件,C语言里我们可以直接通过代码实现文件创建,修改等操作。
我们在进行操作时需要先指定一个文件指针FILE * fp;我们可以将FILE简单理解为一个像int,float的数据类型。
打开文件
fp=fopen(“文件路径”,“打开方式”);
文件路径可以使用相对路径,即"text.txt",此时文件就在该程序所处目录;也可使用绝对路径,即"e:\\code\\data.txt",注意用两个反斜杠“\\”作分隔
打开方式有
文件使用方式 | 意义 |
---|---|
“rt” | 只读打开一个文本文件,只允许读数据 |
“wt” | 只写打开或建立一个文本文件,只允许写数据 |
“at” | 追加打开一个文本文件,并在文件末尾写数据 |
除此以外,还有其他打开方式,这里不过多介绍
关闭文件
关闭文件很简单,我们只需要fclose(fp);就可以了
写入文件
int fprintf(FILE *fp,“格式化字符串”,输出项地址表);
作用:将程序中变量的值写入文件中
与printf格式相似,只是添加了文件指针
FILE *fp=fopen(“text.txt”,“wt”);
fprintf(fp,"%d%s%c",num,name,sex);
fclose(fp);
读取文件
int scanf(FILE *fp,“格式化字符串”,输入项地址表);
作用:将文件的信息按格式读取到程序的变量里
FILE *fp=fopen(“text.txt”,“rt”);
fscanf(fp,"%d%s%c",&num,name,&sex);
头文件,链表节点定义及函数声明
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
typedef struct node//链表节点
{
int number;
char moviename[100];
double price;
double score;
struct node *next;
}MOVIE;
void menu();//菜单目录
MOVIE* creat();//创建一个链表,新用户注册使用
void save(MOVIE *head);//将链表信息保存到文件
void modify(MOVIE *head);//修改文件信息
MOVIE* read();//将文件信息读取到链表
void Printf(MOVIE *head);//将信息逐个打印显示
void insert(MOVIE *head);//插入信息
void del(MOVIE *head);//删除信息
void serch();//按名称查询信息
void sort();//信息排序
int log();//登陆与注册
void sum(MOVIE *head);//信息统计
主函数
int main()
{
printf("\n\n\n");
printf("\t\t\t\t----------------------------------------\n\n");
printf("\t\t\t\t| 欢迎使用影院管理系统 |\n\n");
printf("\t\t\t\t----------------------------------------\n\n");
printf("\n\t\t\t\t\t\t请您登陆\n\n\t\t");
//开始界面
system("pause");//暂停,给用户缓冲
if(log()){//如果登陆注册成功就进入程序,否则直接退出程序
int num;
MOVIE *head=read();//将文件信息读取到链表
system("cls");//清屏,以重新选择
menu();//显示菜单目录
printf("\n请输入您想要的功能:");
scanf("%d",&num);//根据输入编号选择功能
for(;num;){
switch(num){
case 1:
system("cls");//清屏
Printf(head);//打印信息
system("pause");
break;
case 2:
system("cls");
insert(head); //插入信息
break;
case 3:
system("cls");
modify(head);//修改信息
break;
case 4:
system("cls");
del(head);//删除信息
break;
case 5:
system("cls");
serch();//按名称查询信息
system("pause");
break;
case 6:
system("cls");
sort();//信息排序
system("pause");
break;
case 7:
system("cls");
sum(head);//信息统计
system("pause");
break;
}
system("cls");
menu();//再次显示菜单,以供再次选择
printf("\n请输入您想要的功能:");
scanf("%d",&num);
}
}
}
子函数代码
MOVIE* creat()//创造录入信息,注册时使用
{
MOVIE *head,*r,*s;
int sign;
head=(MOVIE*)malloc(sizeof(MOVIE));
head->next=NULL;
r=head;
system("cls");
printf("\n\n\n\t\t\t电影录入\n\n");
printf("按0结束输入\n\n");
printf("请输入电影编号:");
scanf("%d",&sign);
while(sign){
s=(MOVIE*)malloc(sizeof(MOVIE));
s->number=sign;
printf("请输入电影名称:");
scanf("%s",&s->moviename);
printf("请输入电影票价:");
scanf("%lf",&s->price);
if(s->price>100||s->price<15){
printf("出错,请重新输入 :");
scanf("%lf",&s->price);
}
printf("请输入电影评分:");
scanf("%lf",&s->score);
if(s->score>15||s->score<2){
printf("出错,请重新输入 :");
scanf("%lf",&s->score);
}
printf("\n已录入,请继续\n\n");
printf("请输入电影编号:");
scanf("%d",&sign);
r->next=s;
r=s;
}
r->next=NULL;
save(head);
return head;
}
void save(MOVIE *head)//保存信息为文件
{
MOVIE *stu;
FILE *fp;
fp=fopen("电影目录.txt","wt");
for(stu=head->next;stu!=NULL;stu=stu->next){
fprintf(fp,"%d %s %lf %lf\n",stu->number,stu->moviename,stu->price,stu->score);
}
fclose(fp);
printf("\n信息已保存,按任意键退出\n");
getch();
}
void modify(MOVIE *head)//修改信息
{
MOVIE *stu;
stu=head->next;
int i;
printf("\n\n");
Printf(head);
printf("\n\t请输入需要修改的电影编号:");
scanf("%d",&i);
if(i){
for(i;i-1;i--){
stu=stu->next;
}
printf("请输入修改后的票价:");
scanf("%lf",&stu->price);
printf("请输入修改后的评分:");
scanf("%lf",&stu->score);
if(stu->price>100||stu->price<15){
printf("出错,请重新输入 :");
scanf("%lf",&stu->price);
}
if(stu->score>15||stu->score<2){
printf("出错,请重新输入 :");
scanf("%lf",&stu->score);
}
printf("\n\n已成功修改\n");
save(head);
}
}
void insert(MOVIE *head)//插入信息
{
MOVIE *stu,*s;
int num;
stu=(MOVIE*)malloc(sizeof(MOVIE));
s=head;
printf("\n\n");
Printf(head);
printf("\n您想插入哪一个电影之后?:");
scanf("%d",&num);
if(num+1){
stu->number=num+1;
printf("\n请输入电影名称:");//
scanf("%s",&stu->moviename);
printf("请输入电影票价:");
scanf("%lf",&stu->price);
if(stu->price>100||stu->price<15){
printf("出错,请重新输入 :");
scanf("%lf",&stu->price);
}
printf("请输入电影评分:");
scanf("%lf",&stu->score);
if(stu->score>15||stu->score<2){
printf("出错,请重新输入 :");
scanf("%lf",&stu->score);//用stu保存将添加的信息
}
for(num;num;num--){
s=s->next;
}//找到将插入的节点
stu->next=s->next;
s->next=stu;
for(stu=stu->next;stu!=NULL;stu=stu->next){
stu->number++;
}//将后续的电影编号加一
printf("\n已成功插入该电影\n");
save(head);
}
}
void del(MOVIE *head)//删除信息
{
MOVIE *stu=head,*s;
int num;
printf("\n\n");
Printf(head);
printf("\t请输入您想删除的电影编号:");
scanf("%d",&num);
if(num){
for(num;num-1;num--){
stu=stu->next;
}
s=stu->next;
stu->next=s->next;
free(s);
for(stu=stu->next;stu!=NULL;stu=stu->next){
stu->number--;
}
printf("\n\n\t已删除该电影\n");
}
save(head);
}
MOVIE* read()//从文件读取信息到内存
{
MOVIE *head,*r,*stu,*s;
FILE *fp;
fp=fopen("电影目录.txt","rt");
head=(MOVIE*)malloc(sizeof(MOVIE));
head->next=NULL;
r=head;
while(!feof(fp)){
stu=(MOVIE*)malloc(sizeof(MOVIE));
fscanf(fp,"%d %s %lf %lf",&stu->number,stu->moviename,&stu->price,&stu->score);
r->next=stu;
r=stu;
}
r->next=NULL;
fclose(fp);
for(r=head,s=head->next;;r=r->next,s=s->next){
if(r->next->next==NULL){
r->next=NULL;
free(s);
break;
}
}
return head;
}
void Printf(MOVIE *head)//从内存打印信息
{
int i;
printf("\t\t电影目录:\n\n");
printf("\t编号\t名称\t\t票价\t评分\n\n");
for(head=head->next;head!=NULL;head=head->next){
printf("\t%d\t%s",head->number,head->moviename);
for(i=84;i<sizeof(head->moviename)-strlen(head->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",head->price,head->score);
}
printf("\n");
}
void sum(MOVIE *head)//数据统计
{
MOVIE *stu=head->next;
double pri,sco;
int num,i,cnt=0;
printf("\n\n");
Printf(read());
printf("\n\t\t电影查询:\n\n");
printf("\t1-查询票价在??元以下的电影\n");
printf("\t2-查询票价在??元以下且评分在??分以下的电影\n\n");
printf("请输入查询内容:");
scanf("%d",&num);
switch(num){
case 1:
printf("请输入票价限制范围:");
scanf("%lf",&pri);
printf("\n");
printf("\t名称\t\t票价\t评分\n\n");
for(stu;stu!=NULL;stu=stu->next){
if(stu->price<=pri){
printf("\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
cnt++;
}
}
printf("\n");
if(!cnt){
printf("未找到相关信息!");
}
else{
printf("共找到%d",cnt);
printf("条内容\n");
}
break;
case 2:
printf("请输入票价限制范围:");
scanf("%lf",&pri);
printf("请输入评分限制条件:");
scanf("%lf",&sco);
printf("\n");
printf("\t名称\t\t票价\t评分\n\n");
for(stu;stu!=NULL;stu=stu->next){
if(stu->price<=pri&&stu->score>=sco){
printf("\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
cnt++;
}
}
printf("\n");
if(!cnt){
printf("未找到相关信息!");
}
else{
printf("共找到%d",cnt);
printf("条内容\n");
}
break;
}
}
void sort()//数据排序
{
MOVIE *head,*pre,*p,*tail,*stu;
int num,i;
head=read();
tail=NULL;
printf("\n\t\t\t数据排序\n\n\n");
printf("\t1-票价由低到高排序\n");
printf("\t2-评分由高到低排序\n\n") ;
printf("请输入您想要的排序方式:");
scanf("%d",&num);
switch(num){
case 1:
while(head->next!=tail){
pre=head;
p=head->next;
while(p->next!=tail){
if(p->price>p->next->price){
pre->next=p->next;
p->next=pre->next->next;
pre->next->next=p;
}
else{
p=p->next;
}
pre=pre->next;
}
tail=p;
}
printf("\n\t\t名称\t\t票价\t评分\n\n");
for(stu=head->next;stu!=NULL;stu=stu->next){
printf("\t\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
}
break;
case 2:
while(head->next!=tail){
pre=head;
p=head->next;
while(p->next!=tail){
if(p->score<p->next->score){
pre->next=p->next;
p->next=pre->next->next;
pre->next->next=p;
}
else {
p=p->next;
}
pre=pre->next;
}
tail=p;
}
printf("\n\t\t名称\t\t票价\t评分\n\n");
for(stu=head->next;stu!=NULL;stu=stu->next){
printf("\t\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
}
break;
}
printf("\n\t");
}
void serch()
{
char aa[100];
int i;
printf("\n\t\t\t电影查找\n\n\n");
MOVIE *stu=read();
printf("请输入您想查找的电影:");
scanf("%s",aa);
for(stu=stu->next;stu!=NULL;stu=stu->next){
if(!strcmp(stu->moviename,aa)){
printf("\n\t查找到的信息如下:\n\n");
printf("\t编号\t名称\t\t票价\t评分\n\n");
printf("\t%d\t%s",stu->number,stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n\n",stu->price,stu->score);
}
}
}
完整代码
//函数声明
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
typedef struct node//链表节点
{
int number;
char moviename[100];
double price;
double score;
struct node *next;
}MOVIE;
void menu();//菜单目录
MOVIE* creat();//创建一个链表,新用户注册使用
void save(MOVIE *head);//将链表信息保存到文件
void modify(MOVIE *head);//修改文件信息
MOVIE* read();//将文件信息读取到链表
void Printf(MOVIE *head);//将信息逐个打印显示
void insert(MOVIE *head);//插入信息
void del(MOVIE *head);//删除信息
void serch();//按名称查询信息
void sort();//信息排序
int log();//登陆与注册
void sum(MOVIE *head);//信息统计
//主函数
int main()
{
printf("\n\n\n");
printf("\t\t\t\t----------------------------------------\n\n");
printf("\t\t\t\t| 欢迎使用影院管理系统 |\n\n");
printf("\t\t\t\t----------------------------------------\n\n");
printf("\n\t\t\t\t\t\t请您登陆\n\n\t\t");
//开始界面
system("pause");//暂停,给用户缓冲
if(log()){//如果登陆注册成功就进入程序,否则直接退出程序
int num;
MOVIE *head=read();//将文件信息读取到链表
system("cls");//清屏,以重新选择
menu();//显示菜单目录
printf("\n请输入您想要的功能:");
scanf("%d",&num);//根据输入编号选择功能
for(;num;){
switch(num){
case 1:
system("cls");//清屏
Printf(head);//打印信息
system("pause");
break;
case 2:
system("cls");
insert(head); //插入信息
break;
case 3:
system("cls");
modify(head);//修改信息
break;
case 4:
system("cls");
del(head);//删除信息
break;
case 5:
system("cls");
serch();//按名称查询信息
system("pause");
break;
case 6:
system("cls");
sort();//信息排序
system("pause");
break;
case 7:
system("cls");
sum(head);//信息统计
system("pause");
break;
}
system("cls");
menu();//再次显示菜单,以供再次选择
printf("\n请输入您想要的功能:");
scanf("%d",&num);
}
}
}
//子函数
int log()//登陆注册
{
int num,i;
char username[10],fusername[10];
char password[9],password0[9],fpassword[8];
FILE *fp;
system("cls");
printf("\n\t\t登陆\n\n");
printf("\t1-用户登录\n");
printf("\t2-注册成为新用户\n");
printf("\t0-退出程序\n\n");
printf("请输入您的选择:");
scanf("%d",&num);
switch(num){
case 1:
printf("\n\t\t 用户登录\n\n");
printf("请输入您的用户名:");
scanf("%s",&username);
printf("请输入您的密码:");
for(i=0;i<8;i++){//输入8位密码
password[i]=getch();//输入不回显
if(password[i]==8){//按下退格键
printf("\b");
i=i-2;
}
else if(password[i]==9||password[i]==13||password[i]==' '){//按下tab,空格以及回车换行
i--;
}
else{
printf("*");//用“*”代替输入
}
}
password[8]='\0';
fp=fopen("账号管理.txt","rt");
for(i=0;i<3;i++){//以三个账号为例,可以fscanf的返回值判断是否读取完毕
fscanf(fp,"%s %s",&fusername,&fpassword);//重复读取,并存入同一个变量
if(!strcmp(fusername,username)){//判断输入的用户名与文件是否有相同
break;
}
}//最后结果为用户名相同且i<3,或用户名不同且i=3
fclose(fp);
if(!strcmp(fpassword,password)&&i!=3){//判断用户名与输入的密码是否匹配
printf("\n\n\t\t恭喜,登陆成功!\n\n\t");
system("pause");
return 1;
}
else{
printf("\n\n\t\t用户名或密码不正确,请重新登陆!\n\n\t ");
system("pause");//界面停留
log();
}
break;
case 2:
printf("\n\t\t 注册成为新用户\n\n");
printf("请输入您的用户名:");
scanf("%s",&username);
printf("请输入您的密码:");
for(i=0;i<8;i++){//输入8位密码
password[i]=getch();//输入不回显
if(password[i]==8){//按下退格键
printf("\b");
i=i-2;
}
else if(password[i]==9||password[i]==13||password[i]==' '){//按下tab,空格以及回车换行
i--;
}
else{
printf("*");//用“*”代替输入
}
}
password[8]='\0';
printf("\n请确认您的密码:");
for(i=0;i<8;i++){//输入8位密码
password0[i]=getch();//输入不回显
if(password0[i]==8){//按下退格键
printf("\b");
i=i-2;
}
else if(password0[i]==9||password0[i]==13||password0[i]==' '){//按下tab,空格以及回车换行
i--;
}
else{
printf("*");//用“*”代替输入
}
}
password0[8]='\0';
if(!strcmp(password,password0)){//两次的密码是否一致
fp=fopen("账号管理.txt","at");
fprintf(fp,"%s %s\n",username,password);//保存到文件
fclose(fp);
printf("\n\n\t\t已注册,请录入电影信息\n\n");
system("pause");
creat();
return 1;
}
else{
printf("\n\n\t\t两次的密码不一致,请重新登陆!\n\n\t");
system("pause");
log();
}
break;
}
}
void menu()//开始界面
{
printf("\n\n");
printf("\t\t\t\t+--------------------------------------+\n");
printf("\t\t\t\t| 欢迎使用影院管理系统 |\n");
printf("\t\t\t\t| 您已登录 |\n");
printf("\t\t\t\t+--------------------------------------+\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t| 1-影片全览 |\n");
printf("\t\t\t\t| 2-添加影片 |\n");
printf("\t\t\t\t| 3-修改信息 |\n");
printf("\t\t\t\t| 4-删除影片 |\n");
printf("\t\t\t\t| 5-影片查询 |\n");
printf("\t\t\t\t| 6-数据排序 |\n");
printf("\t\t\t\t| 7-数据统计 |\n");
printf("\t\t\t\t| 0-退出程序 |\n");
printf("\t\t\t\t| |\n");
printf("\t\t\t\t+--------------------------------------+\n");
}
MOVIE* creat()//创造录入信息,注册时使用
{
MOVIE *head,*r,*s;
int sign;
head=(MOVIE*)malloc(sizeof(MOVIE));
head->next=NULL;
r=head;
system("cls");
printf("\n\n\n\t\t\t电影录入\n\n");
printf("按0结束输入\n\n");
printf("请输入电影编号:");
scanf("%d",&sign);
while(sign){
s=(MOVIE*)malloc(sizeof(MOVIE));
s->number=sign;
printf("请输入电影名称:");
scanf("%s",&s->moviename);
printf("请输入电影票价:");
scanf("%lf",&s->price);
if(s->price>100||s->price<15){
printf("出错,请重新输入 :");
scanf("%lf",&s->price);
}
printf("请输入电影评分:");
scanf("%lf",&s->score);
if(s->score>15||s->score<2){
printf("出错,请重新输入 :");
scanf("%lf",&s->score);
}
printf("\n已录入,请继续\n\n");
printf("请输入电影编号:");
scanf("%d",&sign);
r->next=s;
r=s;
}
r->next=NULL;
save(head);
return head;
}
void save(MOVIE *head)//保存信息为文件
{
MOVIE *stu;
FILE *fp;
fp=fopen("电影目录.txt","wt");
for(stu=head->next;stu!=NULL;stu=stu->next){
fprintf(fp,"%d %s %lf %lf\n",stu->number,stu->moviename,stu->price,stu->score);
}
fclose(fp);
printf("\n信息已保存,按任意键退出\n");
getch();
}
void modify(MOVIE *head)//修改信息
{
MOVIE *stu;
stu=head->next;
int i;
printf("\n\n");
Printf(head);
printf("\n\t请输入需要修改的电影编号:");
scanf("%d",&i);
if(i){
for(i;i-1;i--){
stu=stu->next;
}
printf("请输入修改后的票价:");
scanf("%lf",&stu->price);
printf("请输入修改后的评分:");
scanf("%lf",&stu->score);
if(stu->price>100||stu->price<15){
printf("出错,请重新输入 :");
scanf("%lf",&stu->price);
}
if(stu->score>15||stu->score<2){
printf("出错,请重新输入 :");
scanf("%lf",&stu->score);
}
printf("\n\n已成功修改\n");
save(head);
}
}
void insert(MOVIE *head)//插入信息
{
MOVIE *stu,*s;
int num;
stu=(MOVIE*)malloc(sizeof(MOVIE));
s=head;
printf("\n\n");
Printf(head);
printf("\n您想插入哪一个电影之后?:");
scanf("%d",&num);
if(num+1){
stu->number=num+1;
printf("\n请输入电影名称:");//
scanf("%s",&stu->moviename);
printf("请输入电影票价:");
scanf("%lf",&stu->price);
if(stu->price>100||stu->price<15){
printf("出错,请重新输入 :");
scanf("%lf",&stu->price);
}
printf("请输入电影评分:");
scanf("%lf",&stu->score);
if(stu->score>15||stu->score<2){
printf("出错,请重新输入 :");
scanf("%lf",&stu->score);//用stu保存将添加的信息
}
for(num;num;num--){
s=s->next;
}//找到将插入的节点
stu->next=s->next;
s->next=stu;
for(stu=stu->next;stu!=NULL;stu=stu->next){
stu->number++;
}//将后续的电影编号加一
printf("\n已成功插入该电影\n");
save(head);
}
}
void del(MOVIE *head)//删除信息
{
MOVIE *stu=head,*s;
int num;
printf("\n\n");
Printf(head);
printf("\t请输入您想删除的电影编号:");
scanf("%d",&num);
if(num){
for(num;num-1;num--){
stu=stu->next;
}
s=stu->next;
stu->next=s->next;
free(s);
for(stu=stu->next;stu!=NULL;stu=stu->next){
stu->number--;
}
printf("\n\n\t已删除该电影\n");
}
save(head);
}
MOVIE* read()//从文件读取信息到内存
{
MOVIE *head,*r,*stu,*s;
FILE *fp;
fp=fopen("电影目录.txt","rt");
head=(MOVIE*)malloc(sizeof(MOVIE));
head->next=NULL;
r=head;
while(!feof(fp)){
stu=(MOVIE*)malloc(sizeof(MOVIE));
fscanf(fp,"%d %s %lf %lf",&stu->number,stu->moviename,&stu->price,&stu->score);
r->next=stu;
r=stu;
}
r->next=NULL;
fclose(fp);
for(r=head,s=head->next;;r=r->next,s=s->next){
if(r->next->next==NULL){
r->next=NULL;
free(s);
break;
}
}
return head;
}
void Printf(MOVIE *head)//从内存打印信息
{
int i;
printf("\t\t电影目录:\n\n");
printf("\t编号\t名称\t\t票价\t评分\n\n");
for(head=head->next;head!=NULL;head=head->next){
printf("\t%d\t%s",head->number,head->moviename);
for(i=84;i<sizeof(head->moviename)-strlen(head->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",head->price,head->score);
}
printf("\n");
}
void sum(MOVIE *head)//数据统计
{
MOVIE *stu=head->next;
double pri,sco;
int num,i,cnt=0;
printf("\n\n");
Printf(read());
printf("\n\t\t电影查询:\n\n");
printf("\t1-查询票价在??元以下的电影\n");
printf("\t2-查询票价在??元以下且评分在??分以下的电影\n\n");
printf("请输入查询内容:");
scanf("%d",&num);
switch(num){
case 1:
printf("请输入票价限制范围:");
scanf("%lf",&pri);
printf("\n");
printf("\t名称\t\t票价\t评分\n\n");
for(stu;stu!=NULL;stu=stu->next){
if(stu->price<=pri){
printf("\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
cnt++;
}
}
printf("\n");
if(!cnt){
printf("未找到相关信息!");
}
else{
printf("共找到%d",cnt);
printf("条内容\n");
}
break;
case 2:
printf("请输入票价限制范围:");
scanf("%lf",&pri);
printf("请输入评分限制条件:");
scanf("%lf",&sco);
printf("\n");
printf("\t名称\t\t票价\t评分\n\n");
for(stu;stu!=NULL;stu=stu->next){
if(stu->price<=pri&&stu->score>=sco){
printf("\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
cnt++;
}
}
printf("\n");
if(!cnt){
printf("未找到相关信息!");
}
else{
printf("共找到%d",cnt);
printf("条内容\n");
}
break;
}
}
void sort()//数据排序
{
MOVIE *head,*pre,*p,*tail,*stu;
int num,i;
head=read();
tail=NULL;
printf("\n\t\t\t数据排序\n\n\n");
printf("\t1-票价由低到高排序\n");
printf("\t2-评分由高到低排序\n\n") ;
printf("请输入您想要的排序方式:");
scanf("%d",&num);
switch(num){
case 1:
while(head->next!=tail){
pre=head;
p=head->next;
while(p->next!=tail){
if(p->price>p->next->price){
pre->next=p->next;
p->next=pre->next->next;
pre->next->next=p;
}
else{
p=p->next;
}
pre=pre->next;
}
tail=p;
}
printf("\n\t\t名称\t\t票价\t评分\n\n");
for(stu=head->next;stu!=NULL;stu=stu->next){
printf("\t\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
}
break;
case 2:
while(head->next!=tail){
pre=head;
p=head->next;
while(p->next!=tail){
if(p->score<p->next->score){
pre->next=p->next;
p->next=pre->next->next;
pre->next->next=p;
}
else {
p=p->next;
}
pre=pre->next;
}
tail=p;
}
printf("\n\t\t名称\t\t票价\t评分\n\n");
for(stu=head->next;stu!=NULL;stu=stu->next){
printf("\t\t%s",stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n",stu->price,stu->score);
}
break;
}
printf("\n\t");
}
void serch()
{
char aa[100];
int i;
printf("\n\t\t\t电影查找\n\n\n");
MOVIE *stu=read();
printf("请输入您想查找的电影:");
scanf("%s",aa);
for(stu=stu->next;stu!=NULL;stu=stu->next){
if(!strcmp(stu->moviename,aa)){
printf("\n\t查找到的信息如下:\n\n");
printf("\t编号\t名称\t\t票价\t评分\n\n");
printf("\t%d\t%s",stu->number,stu->moviename);
for(i=84;i<sizeof(stu->moviename)-strlen(stu->moviename);i++){
printf(" ");
}
printf("%.2lf\t%.1lf\n\n",stu->price,stu->score);
}
}
}