真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

學(xué)生成績管理系統(tǒng)-創(chuàng)新互聯(lián)

文章目錄
    • 題目 題目 題目
    • 做題思路: 做題思路: 做題思路:
    • 最后答案 最后答案 最后答案
    • 事后總結(jié) 事后總結(jié) 事后總結(jié)

成都創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括鎮(zhèn)海網(wǎng)站建設(shè)、鎮(zhèn)海網(wǎng)站制作、鎮(zhèn)海網(wǎng)頁制作以及鎮(zhèn)海網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,鎮(zhèn)海網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到鎮(zhèn)海省份的部分城市,未來相信會繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任! 題目 題目 題目

任 務(wù):
??設(shè)計一個保存學(xué)生成績信息的結(jié)構(gòu)(包括學(xué)號、姓名、課程名、平時成績、考試成績、總評成績),用于保存N個學(xué)生信息。分別設(shè)計函數(shù)實(shí)現(xiàn)以下功能:

功 能:
??1.學(xué)生信息錄入:從文件studentin.txt讀取N個學(xué)生信息(包括學(xué)號、姓名、課程名、平時成績、考試成績),如文件不存在則從鍵盤輸入N個學(xué)生的信息(初始化),并將輸入信息存入文件studentin.txt中;
??2.學(xué)生信息修改:通過輸入學(xué)號查找并修改學(xué)生成績(平時成績、考試成績);
??3.學(xué)生成績統(tǒng)計:計算每個學(xué)生的總評成績(平時20%+考試80%),并輸出完整的學(xué)生信息;
??4.學(xué)生信息瀏覽:輸出全部學(xué)生信息;
??5.退出系統(tǒng):將處理后的學(xué)生信息數(shù)據(jù)存入studentout.txt文件,并退出系統(tǒng)。

要 求:
??1. 編寫函數(shù)實(shí)現(xiàn)各功能模塊;
??2. 在主函數(shù)中設(shè)計(并調(diào)用)一個菜單,輸入相關(guān)功能序號并調(diào)用各函數(shù)實(shí)現(xiàn);
在這里插入圖片描述

做題思路: 做題思路: 做題思路:
  1. 大體流程:
    ??在主函數(shù)內(nèi)輸出一個菜單,通過輸入數(shù)字,結(jié)合switch,case函數(shù)對應(yīng)菜單相應(yīng)的功能,各個功能則由相應(yīng)的函數(shù)執(zhí)行;同時還要定義一個結(jié)構(gòu)體的頭指針。
  2. 菜單函數(shù):
    ??通過printf 函數(shù),照著菜單的樣子輸出一個菜單。
void get_a_menu()
 {printf("          Menu          \n");
	printf("********1-學(xué)生信息錄入********\n"); 
	printf("********2-學(xué)生信息修改********\n"); 
	printf("********3-學(xué)生成績統(tǒng)計********\n"); 
	printf("********4-學(xué)生信息瀏覽********\n"); 
	printf("**********5-退出系統(tǒng)**********\n"); 
  }
  1. 學(xué)生信息錄入函數(shù):
    ?? 根據(jù)題目的要求,從文件studentin.txt中讀入N個學(xué)生的信息;若文件不存在則手動輸入。我的設(shè)計忽略了文件不存在的限定,換為了若文件為空則手動輸入。當(dāng)然要達(dá)到題目的要求只需改變一下文件的打開方式即可。我懶得嘗試了。形參為提前聲明的指向結(jié)構(gòu)體的指針head,返回值也為head。函數(shù)設(shè)計如下:
STU * input(STU *head)
  {STU *tail=head; 
	STU *p;
	char temp[30];  
	FILE *fp;
	fp=fopen("studentin.txt","r+");
	char c; c=fgetc(fp); rewind(fp);
	if(c==EOF)
	{int flag;
		printf("文件為空,請手動輸入學(xué)生成績信息。\n成績將同步到文件中。\n");
		printf("輸入“1”開始,輸入”-1“結(jié)束:"); 
		scanf("%d",&flag); getchar(); 
		while(flag!=-1)
		{	if(head!=NULL)
			{	fprintf(fp,"\n");
			}
			p=(STU *)malloc(sizeof(STU));
			printf("學(xué)生學(xué)號:"); gets(temp);
			p->stu_num=(char *)malloc(strlen(temp)+1); 
			strcpy(p->stu_num,temp); fprintf(fp,"%s ",p->stu_num);
			printf("學(xué)生姓名:");gets(temp);
			p->stu_name=(char *)malloc(strlen(temp)+1);
			strcpy(p->stu_name,temp); fprintf(fp,"%s ",p->stu_name); 
			printf("輸入課程名:");gets(temp);
			p->course_name=(char *)malloc(strlen(temp)+1);
			strcpy(p->course_name,temp); fprintf(fp,"%s ",p->course_name);
			printf("輸入平時分:");scanf("%lf",&p->daily_score); 
			fprintf(fp,"%.1f ",p->daily_score);
			printf("輸入考試分:") ;scanf("%lf",&p->exam_score); 
			fprintf(fp,"%.1f ",p->exam_score);
			p->total_score=p->daily_score*.2+p->exam_score*.8;
			fprintf(fp,"%.1f",p->total_score);
			p->next=NULL;
			if(head==NULL)
			{		head=p;
				tail=p;
			}
			else
			{		tail->next=p;
				tail=p;
			}
			printf("輸入“1”繼續(xù),輸入”-1“結(jié)束:"); 
			scanf("%d",&flag); getchar();
	}
	printf("輸入完畢,成績已保存。\n"); 
	fclose(fp);
  }
  	else
  	{while(!feof(fp))
		{	p=(STU *)malloc(sizeof(STU));
			fscanf(fp,"%s",temp);
			p->stu_num=(char *)malloc(strlen(temp)+1);strcpy(p->stu_num,temp);
			fscanf(fp,"%s",temp);
			p->stu_name=(char *)malloc(strlen(temp)+1);strcpy(p->stu_name,temp);
			fscanf(fp,"%s",temp);
			p->course_name=(char *)malloc(strlen(temp)+1);strcpy(p->course_name,temp);
			fscanf(fp,"%lf",&p->daily_score);
			fscanf(fp,"%lf",&p->exam_score);
			fscanf(fp,"%lf",&p->total_score);
			p->next=NULL;
			if(head==NULL)
			{		head=p;
				tail=p;
			}
			else
			{		tail->next=p;
				tail=p;
			}		
		}
		printf("信息從文件錄入完畢。"); 
		fclose(fp);
	}
	return head;
}
  1. 學(xué)生信息瀏覽函數(shù)
    ?? 函數(shù)需要輸入一個頭指針head作為形參,由于僅是輸出鏈表的內(nèi)容,不需要返回值。根據(jù)題目要求3,4的要求似乎一致,所以設(shè)計為同一個函數(shù)了。函數(shù)設(shè)計如下:
void grade_check(STU *head)
{STU *p=head;
	if(p==NULL)
	{printf("未錄入成績,輸入”1“錄入成績。");
	}
	else
	{printf("學(xué)號\t學(xué)生姓名\t課程名\t平時分\t考試分\t總評分\n");
		while(p!=NULL)
	{printf("%s\t%s\t\t%s\t%.1f\t%.1f\t%.1f\n",p->stu_num,p->stu_name,p->course_name,
		p->daily_score,p->exam_score,p->total_score);
		p=p->next;
	}
	printf("\n成績輸出完畢。");
	}
}
  1. 學(xué)生信息修改函數(shù)
    ?? 形參仍為鏈表的頭指針head,返回值也為head。用一個字符串變量接收用戶輸入的需要修改的學(xué)生的學(xué)號,然后按鏈表存儲的順序循環(huán)找到,修改。問題在于信息在鏈表中是改了,但在txt文本文件中還沒同步修改。我的想法是:通過"w+"的形式打開該文本文件,經(jīng)測試,“w+”打開后文件就清空了,然后通過循環(huán)鏈表再輸入一遍,效果是達(dá)到了,但感覺有點(diǎn)蠢。函數(shù)設(shè)計如下:
STU * modify(STU *head)
{if(head==NULL)
	{printf("未錄入成績,輸入”1“錄入成績。");
	}
	else
	{char key[30]; STU *p=head; getchar(); 
		printf("請輸入需要修改信息的學(xué)生的學(xué)號:");gets(key);
		while(p!=NULL)
		{	if(strcmp(key,p->stu_num)==0)
			{		printf("請輸入修改后的平時分:");scanf("%lf",&p->daily_score);
				printf("請輸入修改后的考試分:");scanf("%lf",&p->exam_score);
				p->total_score=p->daily_score*.2+p->exam_score*.8;
				break;
			}
			else
			{		p=p->next;
			}
		} 
		if(p!=NULL)
		{	p=head;
			FILE *fp;
			fp=fopen("studentin.txt","w+");
			while(p!=NULL)
			{		if(p->next!=NULL)
				{fprintf(fp,"%s %s %s %.1f %.1f %.1f\n",p->stu_num,p->stu_name,p->course_name,
					p->daily_score,p->exam_score,p->total_score);
				}
				else
				{fprintf(fp,"%s %s %s %.1f %.1f %.1f",p->stu_num,p->stu_name,p->course_name,
					p->daily_score,p->exam_score,p->total_score);
				}
				p=p->next;
			}
			printf("修改完成!已同步到文件。\n");
			fclose(fp);
		}
		else
		{	printf("查無此人。\n");
		}
	}
	return head;
}
最后答案 最后答案 最后答案
#include#include#includestruct student
{char *stu_num;
	char *stu_name;
	char *course_name;
	double daily_score;
	double exam_score;
	double total_score;
	struct student *next;
};
typedef struct student STU; 
void get_a_menu();
STU * input(STU *);
void grade_check(STU *);
STU * modify(STU *);
int main()
{STU *head=NULL; 
	get_a_menu();
	while(1)
	{int n; 
		printf("\n\n請輸入相應(yīng)功能編號:");
		scanf("%d",&n);
		switch(n)
		{	case 1: head=NULL;head=input(head);break;
			case 2: head=modify(head);break;
			case 3: grade_check(head);break;
			case 4: grade_check(head);break;
			case 5:exit(0);
			default : printf("Input error! Try again.\n"); 
		 }
		 
	}
	return 0;
 }
 void get_a_menu()
 {printf("          Menu          \n");
	printf("********1-學(xué)生信息錄入********\n"); 
	printf("********2-學(xué)生信息修改********\n"); 
	printf("********3-學(xué)生成績統(tǒng)計********\n"); 
	printf("********4-學(xué)生信息瀏覽********\n"); 
	printf("**********5-退出系統(tǒng)**********\n"); 
  } 
  STU * input(STU *head)
  {STU *tail=head; 
	STU *p;
	char temp[30];  
	FILE *fp;
	fp=fopen("studentin.txt","r+");
	char c; c=fgetc(fp); rewind(fp);
	if(c==EOF)
	{int flag;
		printf("文件為空,請手動輸入學(xué)生成績信息。\n成績將同步到文件中。\n");
		printf("輸入“1”開始,輸入”-1“結(jié)束:"); 
		scanf("%d",&flag); getchar(); 
		while(flag!=-1)
		{	if(head!=NULL)
			{		fprintf(fp,"\n");
			}
			p=(STU *)malloc(sizeof(STU));
			printf("學(xué)生學(xué)號:"); gets(temp);
			p->stu_num=(char *)malloc(strlen(temp)+1); 
			strcpy(p->stu_num,temp); fprintf(fp,"%s ",p->stu_num);
			printf("學(xué)生姓名:");gets(temp);
			p->stu_name=(char *)malloc(strlen(temp)+1);
			strcpy(p->stu_name,temp); fprintf(fp,"%s ",p->stu_name); 
			printf("輸入課程名:");gets(temp);
			p->course_name=(char *)malloc(strlen(temp)+1);
			strcpy(p->course_name,temp); fprintf(fp,"%s ",p->course_name);
			printf("輸入平時分:");scanf("%lf",&p->daily_score); 
			fprintf(fp,"%.1f ",p->daily_score);
			printf("輸入考試分:") ;scanf("%lf",&p->exam_score); 
			fprintf(fp,"%.1f ",p->exam_score);
			p->total_score=p->daily_score*.2+p->exam_score*.8;
			fprintf(fp,"%.1f\n",p->total_score);
			p->next=NULL;
			if(head==NULL)
			{		head=p;
				tail=p;
			}
			else
			{		tail->next=p;
				tail=p;
			}
			printf("輸入“1”繼續(xù),輸入”-1“結(jié)束:"); 
			scanf("%d",&flag); getchar();
	}
	printf("輸入完畢,成績已保存。\n"); 
	fclose(fp);
  }
  	else
  	{while(!feof(fp))
		{	p=(STU *)malloc(sizeof(STU));
			fscanf(fp,"%s",temp);
			p->stu_num=(char *)malloc(strlen(temp)+1);strcpy(p->stu_num,temp);
			fscanf(fp,"%s",temp);
			p->stu_name=(char *)malloc(strlen(temp)+1);strcpy(p->stu_name,temp);
			fscanf(fp,"%s",temp);
			p->course_name=(char *)malloc(strlen(temp)+1);strcpy(p->course_name,temp);
			fscanf(fp,"%lf",&p->daily_score);
			fscanf(fp,"%lf",&p->exam_score);
			fscanf(fp,"%lf",&p->total_score);
			p->next=NULL;
			if(head==NULL)
			{		head=p;
				tail=p;
			}
			else
			{		tail->next=p;
				tail=p;
			}		
		}
		printf("信息從文件錄入完畢。"); 
		fclose(fp);
	}
	return head;
}
void grade_check(STU *head)
{STU *p=head;
	if(p==NULL)
	{printf("未錄入成績,輸入”1“錄入成績。");
	}
	else
	{printf("學(xué)號\t學(xué)生姓名\t課程名\t平時分\t考試分\t總評分\n");
		while(p!=NULL)
	{printf("%s\t%s\t\t%s\t%.1f\t%.1f\t%.1f\n",p->stu_num,p->stu_name,p->course_name,
		p->daily_score,p->exam_score,p->total_score);
		p=p->next;
	}
	printf("\n成績輸出完畢。");
	}
}
STU * modify(STU *head)
{if(head==NULL)
	{printf("未錄入成績,輸入”1“錄入成績。");
	}
	else
	{char key[30]; STU *p=head; getchar(); 
		printf("請輸入需要修改信息的學(xué)生的學(xué)號:");gets(key);
		while(p!=NULL)
		{	if(strcmp(key,p->stu_num)==0)
			{		printf("請輸入修改后的平時分:");scanf("%lf",&p->daily_score);
				printf("請輸入修改后的考試分:");scanf("%lf",&p->exam_score);
				p->total_score=p->daily_score*.2+p->exam_score*.8;
				break;
			}
			else
			{		p=p->next;
			}
		} 
		if(p!=NULL)
		{	p=head;
			FILE *fp;
			fp=fopen("studentin.txt","w+");
			while(p!=NULL)
			{		if(p->next!=NULL)
				{fprintf(fp,"%s %s %s %.1f %.1f %.1f\n",p->stu_num,p->stu_name,p->course_name,
					p->daily_score,p->exam_score,p->total_score);
				}
				else
				{fprintf(fp,"%s %s %s %.1f %.1f %.1f",p->stu_num,p->stu_name,p->course_name,
					p->daily_score,p->exam_score,p->total_score);
				}
			}
			printf("修改完成!已同步到文件。\n");
			fclose(fp);
		}
		else
		{	printf("查無此人。\n");
		}
	}
	return head;
}
事后總結(jié) 事后總結(jié) 事后總結(jié)
  • 為結(jié)構(gòu)體指針?biāo)赶虻慕Y(jié)構(gòu)體初始化時,要先申請空間,為其字符指針成員初始化時,也要申請空間。
  • 緩沖區(qū)的\n有時會被scanf,gets,getc等接收,需要getchar吸收換行,空格。
  • 判斷文件是否讀到結(jié)尾的一個函數(shù):feof(fp),有返回值,如果文件讀到最后了,則返回0;未讀到最后,則返回非0。
  • 判斷文件是否為空的方法,先聲明一個字符變量c通過c=fgetc(fp)初始化,若c==EOF,則文件為空的。
  • 向文件中寫數(shù)據(jù)時,若用\n結(jié)尾的話,再寫入結(jié)構(gòu)體中會多存一個亂的結(jié)點(diǎn)。
  • 總的做的還是不太滿意,但是也疲于再精進(jìn)了。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧


網(wǎng)頁題目:學(xué)生成績管理系統(tǒng)-創(chuàng)新互聯(lián)
瀏覽地址:http://weahome.cn/article/ceegih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部