當前位置:首頁 » 編程語言 » 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);
最後,希望對你有所幫助啊!

熱點內容
百度雲zip怎麼解壓 發布:2025-02-01 16:31:59 瀏覽:560
pmc密碼是什麼意思 發布:2025-02-01 16:28:49 瀏覽:783
蘋果手錶和安卓手錶哪個好用 發布:2025-02-01 16:28:07 瀏覽:582
上海電信上傳 發布:2025-02-01 16:22:10 瀏覽:982
有什麼好的雙u主板配置 發布:2025-02-01 16:18:17 瀏覽:176
編程漩渦 發布:2025-02-01 16:01:51 瀏覽:327
司機會所訪問 發布:2025-02-01 15:54:11 瀏覽:780
家用電腦改成伺服器並讓外網訪問 發布:2025-02-01 15:30:23 瀏覽:354
javac工資 發布:2025-02-01 15:24:28 瀏覽:22
如何刪除伺服器登錄賬號 發布:2025-02-01 15:21:05 瀏覽:498