Maison développement back-end Tutoriel C#.Net Elasticsearch.Net使用教程 MVC4图书管理系统(2)

Elasticsearch.Net使用教程 MVC4图书管理系统(2)

Dec 20, 2016 pm 01:53 PM

本文实例为大家分享了MVC4图书管理系统的制作教程,供大家参考,具体内容如下

首先项目结构图:

Elasticsearch.Net使用教程 MVC4图书管理系统

Model层的相关代码如下:
Book.cs代码如下:

public class Book 
 { 
 [Key] 
 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
 public Guid Id { get; set; } 
  
 [MaxLength(500)] 
  
 [Display(Name = "标题")] 
 public string Title { get; set; } 
  
 [MaxLength(5000)] 
 [Display(Name = "前言")] 
 public string Foreword { get; set; } 
  
 [Display(Name = "总页数")] 
 public int Pages { get; set; } 
  
 [Display(Name = "作者")] 
 public string Author { get; set; } 
 }
Copier après la connexion
public class AppContext:DbContext 
 { 
 public AppContext() 
 { 
   
 } 
 public DbSet<Book> Books { get; set; } 
 }
Copier après la connexion

ViewModels的相关:

public class SearchViewModel 
 { 
 public string Query { get; set; } 
  
 public IEnumerable<IHit<Book>> Results { get; set; } 
  
 public IDictionary<string, Suggest[]> Suggestions { get; set; } 
  
 public long Elapsed { get; set; } 
  
 }
Copier après la connexion

接下来就HomeController.cs和BooksController.cs的代码:

public class HomeController : Controller 
 { 
 private SearchService _searchService; 
 public HomeController() 
 { 
  _searchService = new SearchService(); 
 } 
 public ActionResult Index() 
 { 
  
  return View(); 
 } 
  
 public ActionResult Search(string query, int page = 0, int pageSize = 10) 
 { 
  
  var result = _searchService.Find(query, page, pageSize); 
  var suggestion = _searchService.FindPhraseSuggestion(query, 0, 3); 
  
  var viewModel = new SearchViewModel { Query = query, Results = result.Item1,Elapsed = result.Item2, Suggestions = suggestion }; 
  
  
  return View("Index", viewModel); 
 } 
  
 }
Copier après la connexion
public class BooksController : Controller 
 { 
 private AppContext db = new AppContext(); 
  
 public ActionResult Index() 
 { 
  return View(db.Books.ToList()); 
 } 
  
 public ActionResult Details(Guid? id) 
 { 
  if (id == null) 
  { 
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
  } 
  Book book = db.Books.Find(id); 
  if (book == null) 
  { 
  return HttpNotFound(); 
  } 
  return View(book); 
 } 
  
 public ActionResult Create() 
 { 
  return View(); 
 } 
  
   
 [HttpPost] 
 [ValidateAntiForgeryToken] 
 public ActionResult Create([Bind(Include="Id,Title,Foreword,Pages,Author")] Book book) 
 { 
  if (ModelState.IsValid) 
  { 
  book.Id = Guid.NewGuid(); 
  db.Books.Add(book); 
  db.SaveChanges(); 
  
  //添加书 
  Elasticsearch.Elasticsearch.Client.Index<Book>(book); 
  
  
  
  return RedirectToAction("Index"); 
  } 
  
  return View(book); 
 } 
  
 public ActionResult Edit(Guid? id) 
 { 
  if (id == null) 
  { 
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
  } 
  Book book = db.Books.Find(id); 
  if (book == null) 
  { 
  return HttpNotFound(); 
  } 
  return View(book); 
 } 
  
  
 [HttpPost] 
 [ValidateAntiForgeryToken] 
 public ActionResult Edit([Bind(Include="Id,Title,Foreword,Pages,Author")] Book book) 
 { 
  if (ModelState.IsValid) 
  { 
  db.Entry(book).State = EntityState.Modified; 
  db.SaveChanges(); 
  return RedirectToAction("Index"); 
  } 
  return View(book); 
 } 
  
 public ActionResult Delete(Guid? id) 
 { 
  if (id == null) 
  { 
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
  } 
  Book book = db.Books.Find(id); 
  if (book == null) 
  { 
  return HttpNotFound(); 
  } 
  return View(book); 
 } 
  
 [HttpPost, ActionName("Delete")] 
 [ValidateAntiForgeryToken] 
 public ActionResult DeleteConfirmed(Guid id) 
 { 
  Book book = db.Books.Find(id); 
  db.Books.Remove(book); 
  db.SaveChanges(); 
  return RedirectToAction("Index"); 
 } 
  
 public JsonResult Reindex() 
 { 
  foreach (var book in db.Books) 
  { 
  //Indexing book 
  Elasticsearch.Elasticsearch.Client.Index<Book>(book); 
  } 
  return Json("OK",JsonRequestBehavior.AllowGet); 
 } 
  
 protected override void Dispose(bool disposing) 
 { 
  if (disposing) 
  { 
  db.Dispose(); 
  } 
  base.Dispose(disposing); 
 } 
 }
Copier après la connexion

Elasticsearch辅助类:
首先是Elasticsearch.cs

public class Elasticsearch 
 { 
 private static ElasticClient _client; 
 public static ElasticClient Client 
 { 
  get
  { 
  if (_client == null) 
  { 
   //连接配置 
   var setting = new ConnectionSettings(ElasticsearchConfiguration.Connection,ElasticsearchConfiguration.DefaultIndex); 
   _client = new ElasticClient(setting); 
  } 
  return _client; 
  } 
  
 } 
 }
Copier après la connexion

ElasticsearchConfiguration.cs类

public static class ElasticsearchConfiguration 
 { 
 public static string Host { get { return "http://localhost"; } } 
  
 public static long Port { get { return 9200; } } 
  
 public static Uri Connection 
 { 
  get { return new Uri(string.Format("{0}:{1}", Host, Port)); } 
 } 
  
 public static string DefaultIndex 
 { 
  get { return "library"; } 
 } 
 }
Copier après la connexion

SearchService.cs代码:

public class SearchService 
 { 
 public double MinScore { get {return 0.0005; }} 
  
 //高亮标记前缀 
 public string PreHighlightTag 
 { 
  get { return @"<strong>"; } 
 } 
  
 //高亮标记后缀 
 public string PostHighlightTag 
 { 
  get { return @"</strong>"; } 
 } 
  
  
 public Tuple< IEnumerable<IHit<Book>>,long> Find(string query, int page = 0, int pageSize = 10) 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search<Book>(s => s 
  .From(page * pageSize) 
  .Size(pageSize) 
  .MinScore(MinScore) 
  .Highlight(h => h 
   .PreTags(PreHighlightTag) 
   .PostTags(PostHighlightTag) 
   .OnFields( 
   f => f.OnField(b => b.Foreword), 
   f => f.OnField(b => b.Title) 
   )) 
  .Query(q => q.QueryString(qs => qs.Query(query).UseDisMax()))); 
  
  return new Tuple<IEnumerable<IHit<Book>>, long>(result.Hits,result.ElapsedMilliseconds); 
 } 
  
 //查找短语建议 
 public IDictionary<string, Suggest[]> FindPhraseSuggestion(string phrase, int page = 0, int pageSize = 5) 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search<Book>(s => s 
  .From(page*pageSize) 
  .Size(pageSize) 
  .SuggestPhrase("did-you-mean", ps => ps 
   .Text(phrase) 
   .OnField(f => f.Foreword)) 
  .Query(q => q.MatchAll())); 
   
  return result.Suggest; 
 } 
  
  
 public IEnumerable<IHit<Book>> FindAll() 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search<Book>(s => s.AllIndices()); 
  return result.Hits; 
 } 
  
 }
Copier après la connexion

Views视图
Books文件夹下:
Index.cshtml:

@model IEnumerable<Library.Web.Models.Book> 
  
@{ 
 ViewBag.Title = "Index"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
  
<h2>Index</h2> 
  
<p> 
 @Html.ActionLink("创建新书", "Create") 
</p> 
<table class="table"> 
 <tr> 
 <th> 
  @Html.DisplayNameFor(model => model.Title) 
 </th> 
 <th> 
  @Html.DisplayNameFor(model => model.Foreword) 
 </th> 
 <th> 
  @Html.DisplayNameFor(model => model.Pages) 
 </th> 
 <th> 
  @Html.DisplayNameFor(model => model.Author) 
 </th> 
 <th></th> 
 </tr> 
  
@foreach (var item in Model) { 
 <tr> 
 <td> 
  @Html.DisplayFor(modelItem => item.Title) 
 </td> 
 <td> 
  @Html.DisplayFor(modelItem => item.Foreword) 
 </td> 
 <td> 
  @Html.DisplayFor(modelItem => item.Pages) 
 </td> 
 <td> 
  @Html.DisplayFor(modelItem => item.Author) 
 </td> 
 <td> 
  @Html.ActionLink("编辑", "Edit", new { id=item.Id }) | 
  @Html.ActionLink("详细", "Details", new { id=item.Id }) | 
  @Html.ActionLink("删除", "Delete", new { id=item.Id }) 
 </td> 
 </tr> 
} 
  
</table>
Copier après la connexion

Edit.cshtml:

@model Library.Web.Models.Book 
  
@{ 
 ViewBag.Title = "Edit"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
  
<h2>Edit</h2> 
  
  
@using (Html.BeginForm()) 
{ 
 @Html.AntiForgeryToken() 
  
 <div class="form-horizontal"> 
 <h4>Book</h4> 
 <hr /> 
 @Html.ValidationSummary(true) 
 @Html.HiddenFor(model => model.Id) 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.EditorFor(model => model.Title) 
  @Html.ValidationMessageFor(model => model.Title) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Foreword, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.TextAreaFor(model => model.Foreword) 
  @Html.ValidationMessageFor(model => model.Foreword) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Pages, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.EditorFor(model => model.Pages) 
  @Html.ValidationMessageFor(model => model.Pages) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Author, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.EditorFor(model => model.Author) 
  @Html.ValidationMessageFor(model => model.Author) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  <div class="col-md-offset-2 col-md-10"> 
  <input type="submit" value="Save" class="btn btn-default" /> 
  </div> 
 </div> 
 </div> 
} 
  
<div> 
 @Html.ActionLink("返回列表", "Index") 
</div> 
  
@section Scripts { 
 @Scripts.Render("~/bundles/jqueryval") 
}
Copier après la connexion

Details.cshtml:

@model Library.Web.Models.Book 
  
@{ 
 ViewBag.Title = "Details"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
  
<h2>Details</h2> 
  
<div> 
 <h4>Book</h4> 
 <hr /> 
 <dl class="dl-horizontal"> 
 <dt> 
  @Html.DisplayNameFor(model => model.Title) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Title) 
 </dd> 
  
 <dt> 
  @Html.DisplayNameFor(model => model.Foreword) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Foreword) 
 </dd> 
  
 <dt> 
  @Html.DisplayNameFor(model => model.Pages) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Pages) 
 </dd> 
  
 <dt> 
  @Html.DisplayNameFor(model => model.Author) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Author) 
 </dd> 
  
 </dl> 
</div> 
<p> 
 @Html.ActionLink("编辑", "Edit", new { id = Model.Id }) | 
 @Html.ActionLink("返回列表", "Index") 
</p>
Copier après la connexion

Delete.cshtml:

@model Library.Web.Models.Book 
  
@{ 
 ViewBag.Title = "Delete"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
  
<h2>Delete</h2> 
  
<h3>Are you sure you want to delete this?</h3> 
<div> 
 <h4>Book</h4> 
 <hr /> 
 <dl class="dl-horizontal"> 
 <dt> 
  @Html.DisplayNameFor(model => model.Title) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Title) 
 </dd> 
  
 <dt> 
  @Html.DisplayNameFor(model => model.Foreword) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Foreword) 
 </dd> 
  
 <dt> 
  @Html.DisplayNameFor(model => model.Pages) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Pages) 
 </dd> 
  
 <dt> 
  @Html.DisplayNameFor(model => model.Author) 
 </dt> 
  
 <dd> 
  @Html.DisplayFor(model => model.Author) 
 </dd> 
  
 </dl> 
  
 @using (Html.BeginForm()) { 
 @Html.AntiForgeryToken() 
  
 <div class="form-actions no-color"> 
  <input type="submit" value="Delete" class="btn btn-default" /> | 
  @Html.ActionLink("返回列表", "Index") 
 </div> 
 } 
</div>
Copier après la connexion

Create.cshtml:

@model Library.Web.Models.Book 
  
@{ 
 ViewBag.Title = "Create"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
  
<h2>创建</h2> 
  
  
@using (Html.BeginForm()) 
{ 
 @Html.AntiForgeryToken() 
  
 <div class="form-horizontal"> 
 <h4>Book</h4> 
 <hr /> 
 @Html.ValidationSummary(true) 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.EditorFor(model => model.Title) 
  @Html.ValidationMessageFor(model => model.Title) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Foreword, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.TextAreaFor(model => model.Foreword) 
  @Html.ValidationMessageFor(model => model.Foreword) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Pages, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.EditorFor(model => model.Pages) 
  @Html.ValidationMessageFor(model => model.Pages) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  @Html.LabelFor(model => model.Author, new { @class = "control-label col-md-2" }) 
  <div class="col-md-10"> 
  @Html.EditorFor(model => model.Author) 
  @Html.ValidationMessageFor(model => model.Author) 
  </div> 
 </div> 
  
 <div class="form-group"> 
  <div class="col-md-offset-2 col-md-10"> 
  <input type="submit" value="创建" class="btn btn-default" /> 
  </div> 
 </div> 
 </div> 
} 
  
<div> 
 @Html.ActionLink("回到列表", "Index") 
</div> 
  
@section Scripts { 
 @Scripts.Render("~/bundles/jqueryval") 
}
Copier après la connexion

Home->Index.cshtml

@model Library.Web.ViewModels.SearchViewModel 
@{ 
 ViewBag.Title = "Elasticsearch"; 
} 
  
<div class="jumbotron"> 
 <h1>Elasticsearch入门</h1> 
 <p class="lead">安装和配置群集</p> 
 <ol> 
 <li> 
  <a href="http://www.oracle.com/technetwork/java/ 
javase/downloads/index.html">安装Java</a> 
 </li> 
 <li> 
  <a href="http://www.elasticsearch.org/ 
download/">安装Elasticsearch</a> 
 </li> 
 <li>运行Elasticsearch</li> 
 <li><a href="/Books/Create">增加一些书籍</a></li> 
 </ol> 
</div> 
  
  
@if (Model == null) 
{ 
 return; 
} 
<div style="margin-top: 30px;"> 
 @if (Model.Suggestions.Any(x => x.Key == "did-you-mean")) 
 { 
 <span>你的意思是: </span> 
 foreach (var suggestions in Model.Suggestions["did-you-mean"]) 
 { 
  var count = 0; 
  foreach (var suggestion in suggestions.Options) 
  { 
  <a href="/Home/Search?query=@suggestion.Text"><strong>@suggestion.Text </strong> </a> 
  count++; 
  } 
  if (count == 0) 
  { 
  <span class="alert-danger">没有建议!</span> 
  } 
  
 } 
 } 
</div> 
  
<h3><strong>Results for:</strong> @Model.Query</h3> 
  
@if (Model != null) 
{ 
 <table class="table table-condensed"> 
 <thead> 
  <tr><th>文档的分数(排名相关度)</th><th>Title</th><th>Content</th><th>Author</th></tr> 
 </thead> 
  
 <tbody> 
  @foreach (var result in Model.Results) 
  { 
  <tr> 
   <td>@result.Score</td> 
   <td> 
   <a href="/Books/Details/@result.Id"> 
    @if (result.Highlights != null && result.Highlights.Any(x => x.Key == "title")) 
    { 
    var hl = result.Highlights.FirstOrDefault(x => x.Key == "title"); 
    foreach (var h in hl.Value.Highlights) 
    { 
     WriteLiteral(h); 
    } 
    } 
    else 
    { 
    WriteLiteral(result.Source.Title); 
    } 
   </a> 
   </td> 
  
   <td> 
   @if (result.Highlights != null && result.Highlights.Any(x => x.Key == "foreword")) 
   { 
    var hl = result.Highlights.FirstOrDefault(x => x.Key == "foreword"); 
    foreach (var h in hl.Value.Highlights) 
    { 
    WriteLiteral(h + "..."); 
    } 
   } 
  
   </td> 
  
   <td>@result.Source.Author</td> 
  </tr> 
  
  } 
  @if (!Model.Results.Any()) 
  { 
  <tr> 
   <td colspan="4" class="alert alert-danger" style="text-align:center;">没有结果发现:(</td> 
  </tr> 
  } 
 </tbody> 
  
 </table> 
 <h4><span class="label label-default">@Model.Results.Count()</span>搜索结果用了 @Model.Elapsed 毫秒</h4> 
}
Copier après la connexion

_Layout.cshtml

<!DOCTYPE html> 
<html> 
<head> 
 <meta charset="utf-8" /> 
 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
 <title>@ViewBag.Title</title> 
 @Styles.Render("~/Content/css") 
 @Scripts.Render("~/bundles/modernizr") 
  
</head> 
<body> 
 <div class="navbar navbar-inverse navbar-fixed-top"> 
 <div class="container"> 
  <div class="navbar-header"> 
  <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> 
   <span class="icon-bar"></span> 
   <span class="icon-bar"></span> 
   <span class="icon-bar"></span> 
  </button> 
  @Html.ActionLink("Elasticsearch MVC示例", "Index", "Home", null, new { @class = "navbar-brand" }) 
  </div> 
  <div class="navbar-collapse collapse"> 
  <ul class="nav navbar-nav"> 
   <li>@Html.ActionLink("Home", "Index", "Home")</li> 
   <li>@Html.ActionLink("Books", "Index", "Books")</li> 
  </ul> 
  
  
  @using (Html.BeginForm("Search", "Home", FormMethod.Get,new {@class = "navbar-form navbar-left"})) 
  { 
   <div class="form-group"> 
   <input class="form-control" type="text" placeholder="搜索" name="query" /> 
   </div> 
   <button type="submit" class="btn btn-default">提交</button> 
  } 
  
  
  
  </div> 
  
 </div> 
 </div> 
 <div class="container body-content"> 
 @RenderBody() 
 <hr /> 
 <footer> 
  <p>© @DateTime.Now.Year - Elasticsearch, Nest, ASP.NET 应用</p> 
 </footer> 
 </div> 
  
 @Scripts.Render("~/bundles/jquery") 
 @Scripts.Render("~/bundles/bootstrap") 
 @RenderSection("scripts", required: false) 
</body> 
</html>
Copier après la connexion

结果如图:

Elasticsearch.Net使用教程 MVC4图书管理系统

列表页

Elasticsearch.Net使用教程 MVC4图书管理系统

创建页:

Elasticsearch.Net使用教程 MVC4图书管理系统

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持PHP中文网。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ajouter le compilateur C de niveau suivant Comment ajouter le compilateur C de niveau suivant Mar 03, 2025 pm 05:44 PM

Comment ajouter le compilateur C de niveau suivant

Quelles sont les alternatives à Null en C Quelles sont les alternatives à Null en C Mar 03, 2025 pm 05:37 PM

Quelles sont les alternatives à Null en C

Méthode de copie du code par compilateur de langage C Méthode de copie du code par compilateur de langage C Mar 03, 2025 pm 05:43 PM

Méthode de copie du code par compilateur de langage C

Quel compilateur de langue C est le meilleur? Quel compilateur de langue C est le meilleur? Mar 03, 2025 pm 05:39 PM

Quel compilateur de langue C est le meilleur?

Quelles sont les versions Web des compilateurs de langage C? Quelles sont les versions Web des compilateurs de langage C? Mar 03, 2025 pm 05:42 PM

Quelles sont les versions Web des compilateurs de langage C?

Null est-il toujours important dans la programmation moderne dans le langage C? Null est-il toujours important dans la programmation moderne dans le langage C? Mar 03, 2025 pm 05:35 PM

Null est-il toujours important dans la programmation moderne dans le langage C?

CLANGE COMMANDE COMMANDE C compilateur de langage C Résumé du site Web officiel CLANGE COMMANDE COMMANDE C compilateur de langage C Résumé du site Web officiel Mar 03, 2025 pm 05:41 PM

CLANGE COMMANDE COMMANDE C compilateur de langage C Résumé du site Web officiel

T Tutoriel d'installation du compilateur de langue C (version informatique) T Tutoriel d'installation du compilateur de langue C (version informatique) Mar 03, 2025 pm 05:41 PM

T Tutoriel d'installation du compilateur de langue C (version informatique)

See all articles