当前位置:首页 » 编程语言 » c语言添加信息

c语言添加信息

发布时间: 2023-09-24 15:50:15

c语言!!!程序设计:建立一个学生信息链表,包括学号,姓名,成绩.(实现添加,删除,查询,排序,平均)

代码如下:

/*用c语言链表编写一个学生信息系统程序,要求输出学生的学号,姓名,性别,学号,姓名,成绩(实现添加,删除,查询,排序,平均)*/

#include <stdio.h>

#include <iostream>

#include <string.h>

#include <stdlib.h>

using namespace std;

const int n=5;

/*

* nodeEntry : 节点数据类型

* nodeADT : 节点结构

* linkADT : 链表结构

*/

typedef struct Student

{

int num;

char name[30];

char sex;

float score1;//语文

float score2;//数学

float score3;//英语

//struct Student *next;

}Student;

typedef struct linkCDT {

nodeADT head;

}*linkADT;

/*

* InitLink : 初始化链表

* CreateNode : 创建节点

* AppendLink : 添加数据

*/

nodeADT CreateNode(Student entry) {

nodeADT p=(nodeADT)malloc(sizeof*p);

p->entry=entry,p->next=0;

return p;

}

/*

SortLink : 排序链表

//按学号排序

void SortLinkID(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (pHead->entry.num>=p->entry.num)

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

//按英语成绩排序

void SortLinkEnglish(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (pHead->entry.score3>=p->entry.score3)

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

}

//按姓名的字典序进行排序

void SortLinkName(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (pHead->entry.name[0]>=p->entry.name[0])

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

}

//按姓名的长度进行排序

void SortLinkNameLength(linkADT link) {

nodeADT pHead,pRear,p,tp;

if (!link) return;

for (pHead=link->head,pRear=0;pHead;pHead=pHead->next) {

for (tp=pHead,p=pHead->next;p;tp=p,p=p->next)

if (strlen(pHead->entry.name)>=strlen(p->entry.name))

tp->next=p->next,p->next=pHead,pHead=p,p=tp;

if (!pRear) link->head=pHead;

else pRear->next=pHead;

pRear=pHead;

}

循环链表是与单链表一样

是一种链式的存储结构,所不同的是,循环链表的最后一个结点的指针是指向该循环链表的第一个结点或者表头结点,从而构成一个环形的链。

循环链表的运算与单链表的运算基本一致。所不同的有以下几点:

1、在建立一个循环链表时,必须使其最后一个结点的指针指向表头结点,而不是象单链表那样置为NULL。此种情况还使用于在最后一个结点后插入一个新的结点。

2、在判断是否到表尾时,是判断该结点链域的值是否是表头结点,当链域值等于表头指针时,说明已到表尾。而非象单链表那样判断链域值是否为NULL。

以上内容参考:网络-链表

Ⅱ C语言在键盘上输入三个学生的信息(包含学号,姓名,三门课的成绩)并在显示器上输

id, name, &m1

id, name, m1

voidprintScore(intscore[4][3])

{inti,j;for(i=0;i<4;i++)

{printf("学生%d的三门成绩分别为:

",i+1);for(j=0;j<3;j++)

{printf("%d ",score<i>[j]);

if(j==2)printf(" ");}}printf(" ");}

printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。格式输出,它是c语言中产生格式化输出的函数(在stdio.h中定义)。

函数介绍

printf()函数是格式化输出函数,一般用于向标准输出设备按规定格式输出信息。在编写程序时经常会用到此函数。函数的原型为:intprintf(constchar*format);

函数返回值为整型。若成功则返回输出的字符数,输出出错则返回负值。

printf()函数的调用格式为:printf("<格式化字符串>",<参量表>);其中格式化字符串包括两部分内容:一部分是正常字符,这些字符将按原样输出;另一部分是格式化规定字符,以"%"开始,后跟一个或几个规定字符,用来确定输出内容格式。

以上内容参考:网络-printf()

Ⅲ 用C语言编写录入学生信息(学号、性别、年龄、院系 )

//自己再添上性别 什么的就行
#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#define _COURSES 3//定义科目数
#define _LEN sizeof(student)//定义结构体大小

//枚举返回值情况
enum status
{
OVERFLOW = -1, //内存(溢出)问题
DONE = 0, //成功
NOFOUND = 1, //不存在
OPENFAIL = 2, //打开(文件)失败
BACK = 3 //返回
};
//end

//定义学生信息结构体
typedef struct StudentInfo
{
//数据域
unsigned int num;//学号
char name[11];//姓名
float scores[_COURSES];//各科成绩
//指针域
struct StudentInfo *next;//存放下一节点的地址
}student;
//end

student *head=NULL;//声明链表头结点
student *curr=NULL;//声明指向当前节点的指针
int total = 0;//声明当前节点个数

int init();//初始化链表
int add_stu();//添加新节点
int show_all();//显示所有学生信息
int find_stu();//查找指定信息节点
int modify_stu();//修改指定信息节点
int remove_stu();//删除指定信息节点
int sort_list();//对链表排序
int save_to_file();//将所有信息保存至文件
int read_from_file();//从文件中读取信息
void about();//关于
int quit();//释放所有节点空间

int entering(student *input);//录入学生信息
void show_stu(student *show, int serial);//显示指定学生信息
void start();//程序开始界面
void change(student *former, student *latter, student *temp);//交换两个节点的数据域

void main()
{
int choice=0;
init();
while(1)
{
system("cls");
start();
printf("请选择:");
scanf("%d",&choice);
fflush(stdin);//清空缓冲区
switch (choice)
{
case 1:
{
add_stu();
break;
}
case 2:
{ show_all();
break;
}
case 3:
{
find_stu();
break;
}
case 4:
{
modify_stu();
break;
}
case 5:
{
remove_stu();
break;
}
case 6:
{
sort_list();
break;
}
case 7:
{
save_to_file();
break;
}
case 8:
{
read_from_file();
break;
}
case 9:
{
about();
break;
}
case 0:
{
quit();
exit(0);
break;
}
default:{break;}
}
system("pause");
}
}

/*******************************************************/
/*功能: 初始化带头结点的链表,头结点指针域置空 */
/* */
/*返回: */
/*******************************************************/
int init()
{
head = (student *)malloc(_LEN);//为头结点申请空间
if (!head)
{//如果申请空间失败,返回
return OVERFLOW;
}
head->next = NULL;//指向下一节点(空)
curr = head->next;//当前节点指针指向第一个结点
total = 0;//当前节点个数初始化为0(头结点不计算在内)

return DONE;
}

/*******************************************************/
/*功能:头插法添加新节点,并刷新学生人数 */
/* */
/*返回: */
/*******************************************************/
int add_stu()
{
student *add = (student *)malloc(_LEN);
curr = head->next;//当前节点指针指向第一个节点

printf("\t====当前已存入 %d 个同学\n",total);
printf("请输入第 %d 个学生的信息\n",total+1);
if (BACK == entering(add))
{
free(add);
return BACK;
}

head->next = add;//头结点指针域指向新建的节点
add->next = curr;//新建节点指针域指向第一个节点
curr = add; //当前节点指向新建的节点
total += 1; //更新学生总人数
return DONE;
}

/*******************************************************/
/*功能:显示所有学生信息 */
/* */
/*返回: */
/*******************************************************/
int show_all()
{
if ( 0 == total )
{
printf("\t====没有可供显示的学生信息!\n");
return NOFOUND;
}

curr = head->next;//当前节点指针指向第一个节点

printf("\t%4s%12s%12s","序号","学号","姓名");
for (int m=0; m<_COURSES; m++)
{
printf("%7s","科目");
}
printf("\n");
printf("\t-------------------------------------------------------------\n");

for (int i=1; i<=total; i++)
{
show_stu(curr,i);
curr = curr->next;//当前节点指针后移
}
printf("\t-------------------------------------------------------------\n");

return DONE;
}

/*******************************************************/
/*功能:查找指定学生信息 */
/* */
/*返回: */
/*******************************************************/
int find_stu()
{
char stu_name[11];
int flag=1;
printf("请输入要查找的学生姓名:");
scanf("%s",stu_name);
curr = head->next;//指向第一个节点
while (curr != NULL)
{
if (strcmp(stu_name,curr->name) == 0)
{
printf("\t%4s%12s%12s","序号","学号","姓名");
for (int m=0; m<_COURSES; m++)
{
printf("%7s","科目");
}
printf("\n");
printf("\t-------------------------------------------------------------\n");
show_stu(curr,flag);

return DONE;
}
curr = curr->next;
++flag;
}
printf("\t====没有找到 %s !请仔细核对姓名再查找\n",stu_name);
return NOFOUND;
}

/*******************************************************/
/*功能:修改指定学生的所有信息 */
/* */
/*返回: */
/*******************************************************/
int modify_stu()
{
char stu_name[11];
int flag=1;
curr = head->next;//指向第一个节点
printf("请输入要修改的学生的姓名:");
scanf("%s",stu_name);

while (curr != NULL)
{
if (strcmp(stu_name,curr->name) == 0)
{
printf("\t%4s%12s%12s","序号","学号","姓名");
for (int m=0; m<_COURSES; m++)
{
printf("%7s","科目");
}
printf("\n");
printf("\t-------------------------------------------------------------\n");
show_stu(curr,flag);

entering(curr);
printf("\t====成功修改了 %s 的所有信息!\n",stu_name);

return DONE;
}
curr = curr->next;
++flag;
}
printf("\t====没有找到 %s !请仔细核对姓名\n",stu_name);
return NOFOUND;
}

/*******************************************************/
/*功能:删除指定学生 */
/* */
/*返回: */
/*******************************************************/
int remove_stu()
{
student *pre=head;
char stu_name[11];
curr = head->next;//指向第一个节点
printf("请输入要删除的学生的姓名:");
scanf("%s",stu_name);

while (curr != NULL)
{
if (strcmp(stu_name,curr->name) == 0)
{
pre->next = curr->next; //
free(curr); //
--total; //
printf("\t====已成功删除\"%s\"\n",stu_name);

return DONE;
}
pre = pre->next;
curr = curr->next;
}
printf("\t====没有找到 %s !请仔细核对姓名\n",stu_name);
return NOFOUND;
}

/*******************************************************/
/*功能:对所有学生排序 */
/* */
/*返回: */
/*******************************************************/
int sort_list()
{
student *temp = (student *)malloc(_LEN);
student *curr_i = head->next;
student *curr_j = NULL;
char choice='0';

printf("\t \t1----按学号排序 .\t2----按姓名排序 . \n");
printf("\t \t3----按科目排序 .\t0----退 出 排 序. \n");
printf("请选择:");
scanf("%c",&choice);
fflush(stdin);
switch (choice)
{
case '1':
{
while(curr_i->next != NULL)
{
curr_j = curr_i->next;
while (curr_j != NULL)
{
if (curr_i->num > curr_j->num)
{
change(curr_i,curr_j,temp);
}
curr_j = curr_j->next;
}
curr_i = curr_i->next;
}
printf("\t====排序成功!\n");
break;
}
case '2':
{
while(curr_i->next != NULL)
{
curr_j = curr_i->next;
while (curr_j != NULL)
{
if (strcmp(curr_i->name , curr_j->name) > 0)
{
change(curr_i,curr_j,temp);
}
curr_j = curr_j->next;
}
curr_i = curr_i->next;
}
printf("\t====排序成功!\n");
break;
}
case '3':
{
while(curr_i->next != NULL)
{
curr_j = curr_i->next;
while (curr_j != NULL)
{
if (curr_i->scores[0] < curr_j->scores[0])
{
change(curr_i,curr_j,temp);
}
curr_j = curr_j->next;
}
curr_i = curr_i->next;
}
printf("\t====排序成功!\n");
break;
}
case '0':
{
free(temp);
return BACK;
}
default:
{printf("\t====输入有误!\n");break;}
}
free(temp);
return DONE;
}

/*******************************************************/
/*功能:保存数据到文件 */
/* */
/*返回: */
/*******************************************************/
int save_to_file()
{
curr=head->next;
if (total == 0)
{
printf("\t====目前还没有任何信息,不用保存!\n");
return BACK;
}

FILE *fp;
if((fp=fopen("record.dat","wb"))==NULL)
{
printf("\t====文件打开失败!\n");
return OPENFAIL;
}
while (curr != NULL)
{
//将数据成块写入文件
fwrite((char *)curr, _LEN, 1, fp);
curr=curr->next;
}
fclose(fp);
printf("\t====信息已成功保存至文件\"record.dat\"文件中\n");

return DONE;
}

/*******************************************************/
/*功能:从文件中读取数据 */
/* */
/*返回: */
/*******************************************************/
int read_from_file()
{
char judge='y';
FILE *fp;

if((fp=fopen("record.dat","r"))==NULL)
{
printf("文件不存在或者打开失败!\n");
return OPENFAIL;
}
printf("\t====读取文件会覆盖当前信息!是否确定载入文件?(y/n):");
scanf("%c",&judge);
if (judge=='n' || judge=='N')
{
return BACK;
}

quit();//释放以前所有信息的空间
init();//重新初始化链表
curr = head;//当前节点指针指向头结点

student *add=(student *)malloc(_LEN);//申请空间存放读取的信息

while (fread((char *)add, _LEN, 1, fp))
{//由于存储的信息是最新的信息在前,所以读取的时候将其添加在链表尾
add->next=curr->next;
curr->next=add;
curr=add;
add=(student *)malloc(_LEN);
++total;
}
fclose(fp);
printf("\t====文件载入成功!当前已有%d个学生。\n",total);

return DONE;
}

/*******************************************************/
/*功能: */
/* */
/*返回: */
/*******************************************************/
void about()
{
printf("\t#############################################################\n");
printf("\n\t \t欢迎各位用户反馈Bug或提出宝贵的意见和建议 \n");
printf("\t \t联系方式 \n");
printf("\t \t手 机:13667102098 \n");
printf("\t \tE-mail:[email protected] \n");
printf("\n\t \t\tC语言学生成绩管理系统1.0版\n\n");
printf("\t#############################################################\n");
}

/*******************************************************/
/*功能:释放内存 */
/* */
/*返回: */
/*******************************************************/
int quit()
{
curr =head->next;
student *temp=curr;
while(curr != NULL)
{
temp=curr->next;
free(curr);
curr=temp;
}
curr=NULL;
temp=NULL;
free(head);//释放头节点
return DONE;
}

//////////////////////////////////////////////////////////////////////////

/*******************************************************/
/*功能:录入一个学生的全部信息 */
/* */
/*返回: */
/*******************************************************/
int entering(student *input)
{
printf("\n请输入学生的学号(输入0退出添加):");
scanf("%d",&input->num);
if (0 == input->num)
{
return BACK;
}

printf("请输入学生的姓名(五个汉字以内):");
scanf("%s",&input->name);

printf("请输入%d门科目的成绩(用空格隔开):", _COURSES);
for (int i=0; i<_COURSES; i++)
{
scanf("%f",&input->scores[i]);
}

return DONE;
}

/*******************************************************/
/*功能:显示指定学生的所有信息 */
/* */
/*返回: */
/*******************************************************/
void show_stu(student *show, int serial)
{
printf("\t%4d%12d%12s",serial,show->num,show->name);
for (int i=0; i<_COURSES; i++)
{
printf("%7.1f",show->scores[i]);
}
printf("\n");
}

/*******************************************************/
/*功能:根据权限进入不同的界面 */
/* */
/*返回: */
/*******************************************************/
void start()
{
printf("\n");
printf("\t\t\t欢迎使用学生成绩管理系统\n");
printf("\t*************************************************************\n");
printf("\t|\t1----添 加 学 生.\t2----显 示 信 息. |\n");
printf("\t|\t3----查 找 学 生.\t4----修 改 信 息. |\n");
printf("\t|\t5----删 除 学 生.\t6----学 生 排 序. |\n");
printf("\t|\t7----信 息 存 档.\t8----读 取 存 档. |\n");
printf("\t|\t9----关 于.\t0----退 出. |\n");
printf("\t*************************************************************\n");
}

/*******************************************************/
/*功能: */
/* */
/*返回: */
/*******************************************************/
void change(student *former, student *latter,student *temp)
{
*temp = *former;

strcpy(former->name , latter->name);
strcpy(latter->name , temp->name);
former->num = latter->num;
latter->num = temp->num;
for (int i=0; i<_COURSES; i++)
{
former->scores[i] = latter->scores[i];
latter->scores[i] = temp->scores[i];
}
}

Ⅳ 怎么样用 C语言 做出 显示输入信息和录入信息

两种情况:
第一种:如果你是想从写好的文件中读数据的话,那么使用这种方法
FILE *f1;
if((f1=fopen("read.txt","r")==NULL)
{
cout<<"打开文件错误!"<<endl;
exit(0);
}
char ch=fgetc(f1);
while(ch!=EOF)
{
putchar(ch);
ch=fgetc(f1);
}
fclose(f1);
第二种:如果你是想在程序中动态的输入数据,并写入到文件中,然后从文件中显示出来的话。方法为:
char *s;
char s1[256];
cout<<"请输入一个字符串:"<<endl;
cin>>s;
FILE *f1;
if((f1=fopen("write.txt","w+")==NULL)
{
cout<<"打开文件错误!"<<endl;
exit(0);
}
int length=strlen(s);
fputs(s,f1);//将字符串中的字符写到文件中去。
while(fgets(s1,length+1,f1)!=NULL)
{cout<<s1;}
cout<<endl;
fclose(f1);
最后,希望对你有所帮助啊!

热点内容
androidgetpath 发布:2025-03-07 03:07:30 浏览:474
aspphp环境 发布:2025-03-07 02:40:38 浏览:382
c语言汉字转拼音 发布:2025-03-07 02:26:05 浏览:557
磁盘与数据库 发布:2025-03-07 02:19:54 浏览:561
微信的缓存是什么 发布:2025-03-07 02:15:17 浏览:995
sql添加表数据 发布:2025-03-07 02:15:16 浏览:593
其他台式电脑怎么登录服务器 发布:2025-03-07 02:09:45 浏览:106
数控车床g76编程实例 发布:2025-03-07 02:07:43 浏览:662
魔兽世界新服务器是什么意思 发布:2025-03-07 02:07:41 浏览:619
ftp传输二进制 发布:2025-03-07 01:57:26 浏览:286