网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
08月28日漏签0天
c语言吧 关注:799,032贴子:4,359,508
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 4回复贴,共1页
<<返回c语言吧
>0< 加载中...

请问这个问题在哪?跪求帮助

  • 只看楼主
  • 收藏

  • 回复
  • 三六九11
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
刚学C语言,课程设计一个管理系统,一直出错,改了好久,心态要崩了,晕晕乎乎的,求大佬帮帮我。


  • 三六九11
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#define N 3
struct Node
{
int num; /*学号*/
char name[10]; /*姓名*/
int age; /*年龄*/
int score; /*成绩*/
char addr[15]; /*数据域*/
struct Node *next; /*指针域*/
};
/*建立带头结点的链表*/
struct Node *creat_inf()
{
struct Node *head,*r,*stu;
int i=0;
char choice;
head=(struct Node *)malloc(sizeof(struct Node)); /*创建头文件结点*/
head->next=NULL;
r=head;
do
{
stu=(struct Node *)malloc(sizeof(struct Node));
printf("\n\n第%d个人的信息:\n",++i);
printf("\n学号 姓名 年龄 成绩 住址:");
scanf("%d %s %d %d %s",&stu->num,&stu->name,&stu->age,&stu->score,&stu->addr);
r->next=stu; /*尾插新结点*/
r=stu;
printf("contiune?(Y/N)");
choice=getche();
}while(choice=='Y'||choice=='y');
r->next=NULL;
return(head);
}
/*保存基本信息到指定文件*/
save_inf(struct Node *h)
{
struct Node *stu;
FILE *fp;
char filename[40];
printf("\n请输入要保存的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"wt"))==NULL)
printf("写文件出错,按任意键退出!");
for(stu=h->next;stu!=NULL;stu=stu->next)
fprintf(fp,"%d %s %d %d %s\n",stu->num,stu->name,stu->age,stu->score,stu->addr);
printf("\n文件以保存成功,按任意键返回!");
getch();
fclose(fp);
}
/*从指定的磁盘文件中读取信息并存入链表中*/
struct Node *read_inf()
{
struct Node *head,*r,*stu;
FILE *fp;
char filename[40];
printf("\n请输入要打开的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"rt"))==NULL)
{
printf("读文件出错,按任意键退出!");
getch();
exit(1);
}
head=(struct Node *)malloc(sizeof(struct Node));
head->next=NULL;
r=head;
stu=(struct Node *)malloc(sizeof(struct Node));
/*存放读取信息*/
fscanf(fp,"%d %s %d %d %s",&stu->num,stu->name,&stu->age,&stu->score,stu->addr);
while(!feof(fp)) /*文件未结束*/
{
r->next=stu;
r=stu;
/*开辟空间,以存放读取信息*/
stu=(struct Node *)malloc(sizeof(struct Node));
/*存放读取信息*/
fscanf(fp,"%d %s %d %d %s",&stu->num,stu->name,&stu->age,&stu->score,stu->addr);
}
r->next=NULL;
fclose(fp);
printf("\n文件中信息以正确读出,按任意键返回!");
getch();
return head;
}
/*将链表中的信息打印输出*/
print_inf(struct Node *h)
{
struct Node *stu;
printf("\n该班数据为: \n");
printf("学号 姓名 年龄 成绩 住址\n");
for(stu=h->next;stu!=NULL;stu=stu->next)
printf("%d %s %d %d %s\n",stu->num,stu->name,stu->age,stu->score,stu->addr);
}
/*输出*/
void print(struct Node*p)
{
p=p->next;
while(p!=NULL)
{
printf("学号:%d 姓名:%s 年龄:%d 成绩:%d 住址:%s\n",p->num,p->name,p->age,p
->score,p->addr);
p=p->next;
}
}
/*链表的查找*/
struct Node * find(struct Node *p)/*链表的查找*/
{
long num;
printf("请输入要查找的学号:");
scanf("%d",&num);
while(p->next!=NULL)
{
p=p->next; /*指针后移,比较下一结点*/
if(p->num==num) /*找到则返回指向该结点的指针P*/
return p;
}
return NULL; /*未找到则返回空指针NULL*/
}


2025-08-28 03:53:46
广告
不感兴趣
开通SVIP免广告
  • 三六九11
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*删除链表*/
int delete(struct Node *p0)
{
long num;
struct Node *p;
printf("请输入要删除的学号: DNO:");
scanf("%1d",&num);
p=p0->next;
if(p==NULL)
return 0; /*只要头结点为空,不能删除返回0*/
while(p->next!=NULL)
{
if(p->num==num) /*找到要删除的结点*/
{
p0->next=p->next; /*后续结点链接到前驱结点之后*/
free(p);
return 1;
}
p0=p; /*退役指针继续查找*/
p=p->next;
}
return 0; /*未找到要删除的结点返回0*/
}
/*链表节点的插入*/
int insert (struct Node *p0)
{
struct Node *p;
p=(struct Node*)malloc(sizeof (struct Node));/*指向新申请的结点*/
printf("请输入要插入的学号 姓名 年龄 成绩 住址\n");
scanf("%d %s %d %d %s",&p->num,p->name,&p->age,&p->score,p->addr);
while(p0->next!=NULL&&p0->next->num<p->num)
p0=p0->next; /*继续查找插入位置*/
if(p0->next!=NULL&&p0->next->num==p->num) /*找到重号*/
{
free(p); /*释放新结点的存储空间*/
return 0; /*不插入返回0 */
}
p->next=p0->next; /*后续节点连接到新结点之后*/
p0->next=p; /*新结点链接到前驱结点之后*/
return 1;
}
/*修改*/
void modify(struct Node *p)
{
long num;int choice,flag;
do
{
printf("\n输入要修改信息学生学号:");
scanf("%d",&num);
while(p->next!=NULL) /*查找*/
{
p=p->next;
if(p->num==num) break;
}
printf("\n 您要修改那一项\n");
printf("\n 0.学号");
printf("\n 1.姓名\n");
printf("\n 2.年龄\n");
printf("\n 3.成绩\n");
printf("\n 4.住址\n");
printf("\n 请选择0-4):");
scanf("%d",&choice);
switch(choice)
{
case 0:printf("\n 输入修改后的学号");
scanf("%d",&p->age );break;
case 1:printf("\n 输入修改后的姓名:");
scanf("%s",p->name );break;
case 2:printf("\n 输入修改后的年龄:");
scanf("%d",&p->age );break;
case 3:printf("\n 输入修改后的成绩:");
scanf("%d",&p->score );break;
case 4:printf("\n 输入修改后的地址:");
scanf("%s",p->addr);break;
}
printf("\n输出修改后学生信息\n");
printf("%d %s %d %d %s",p->num ,p->name,p->age,p->score,p->addr);
printf("\n\n继续修改吗?(Y/N) ");
choice=getch();
if(choice=='Y'||choice=='y')
{
flag=1;
printf("\n 继续 \n");
}
else flag=0;
}while(flag==1);
printf("\n按任意键返回");
}
/*学生个数统计*/
struct Node* count(struct Node *head)
{
struct Node *p;
int n=0;
for(p=head->next;p!=NULL;p=p->next)
if(p!=NULL)
n++;
printf("学生总人数%d",n);
return (head);
}


  • 三六九11
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
/*学生成绩由小到大排序*/
struct Node* sort(struct Node* head)
{
struct Node *temp1,*p1,*p2,*min,*temp;
temp=(struct Node*)malloc(sizeof(struct Node));
if(head->next==NULL)
return head;
for(p1=head->next;p1!=NULL;p1=p1->next)
{
min=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next)
if(min->score>p2->score)
min=p2;
if(min!=p1)
{
*temp=*min;
*min=*p1;
*p1=*temp;
temp1=min->next;
min->next=p1->next;
p1->next=temp1;
}
}
for(p1=head->next;p1!=NULL;p1=p1->next)
printf("%d %s %d %d %s \n",p1->num,p1->name,p1->age,p1->score,p1->addr);
return head;
}
void main()
{
int choice,i;char s[6];
struct Node *head,*p;
printf("请输入密码123123\n\n");
printf("\n\n\n\t\t登陆学生管理系统,请输入密码:");
for(i=0;i<6;i++)
{
s[i]=getch();
printf("*");
}
s[6]='\0';
if (strcmp(s,"123123")==0)
{
printf("\n\n\n\n\t密码输入正确,系统正在打开中,按任意键进入……");
getch();
do
{
printf
("\n\n$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n");
printf("***********************************学生信息管理系统
****************************");
printf(" 1.创建基本信息单链表\n\n");
printf(" 2.保存基本信息到指定文件\n\n");
printf(" 3.从指定文件中读取信息\n\n");
printf(" 4.打印显示单链表中基本信息\n\n");
printf(" 5.输出单链表中基本信息\n\n");
printf(" 6.查找单链表中基本信息\n\n");
printf(" 7.插入单链表中基本信息\n\n");
printf(" 8.删除单链表中基本信息\n\n");
printf(" 9.修改单链表中基本信息\n\n");
printf(" 10.统计学生个数\n\n");
printf(" 11.学生成绩由大到小排序\n\n ");
printf
("###############################################################################\n\n");
printf(" 请选择(0----------11): ");
scanf("%d",&choice);
switch(choice)
{
case 1: head=creat_inf();break; /*创建基本信息单链表*/
case 2:save_inf(head); break; /*保存基本信息到指定文件*/
case 3:head=read_inf(); break; /*从指定文件中读取信息*/
case 4:print_inf(head); break; /*打印显示单链表中基本信息*/
case 5:print(head); break; /*输出*/
case 6:p=find(head); /*查找*/
if(p)
printf("找到学号:%d 姓名:%s 年龄:%d 成绩:%d 住址:%s\n",p-
>num,p->name,p->age,p->score,p->addr);
else printf("没找到!\n");break;
case 7:if(insert(head)) /*插入*/
printf("已成功插入\n");
else printf("有重号插入失败\n");
print (head); break;
case 8:if(delete(head)) /*删除*/
printf("已正确删除!\n");
else printf("要删除结点不存在\n");
print(head); break;
case 9:modify(head); break; /*修改*/
case 10:count(head);break; /*统计*/
case 11:sort(head) ;break; /*排序*/
case 0: break;
}
}while(choice!=0);
}
else
printf("\n\n\n\t\t对不起,你的密码输入有误!\n\n");
}


  • 加qq2939242705
  • 大能力者
    8
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
,好长的


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 4回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示